02.07 - Boolean 값과 if 문의 소개
실생활에서 "예" 또는"아니요"로 답할 수 있는 질문을 하거나 질문을 받는 것은 흔한 일이다.
- 사과를 좋아하는가?: 예
- 점심을 먹었는가?: 아니요
위 두 문장 모두 예, 아니요로 대답할 수 있는 문장이다. "예", "아니요"는 흔하므로 C++ 에서는 이들을 다루는 특별한 자료형
부울(bool)이 있다.
Boolean variables
부울 변수 참(true: 1)
과 거짓(false: 0)
값만 가질 수 있는 변수다. 부울 변수를 선언하려면 키워드 bool
을 사용한다.
bool b
부울 변수에 true 또는 false 값을 초기화하거나 할당하려면 true
및 false
키워드를 사용한다.
bool b1 = true;
bool b2(false);
bool b3 { true };
b3 = false;
빼기 연산자(-)를 이용해 양수를 음수로 바꿀 수 있는 것처럼 논리 부정 연산자(logical NOT operator: !)를 사용해서 부울 값을 true에서 false 또는 false에서 true로 바꿀 수 있다.
bool b1 = !true;
bool b2(!false);
부울 값은 실제로 부울 변수에 "true" 또는"false"라는 단어로 저장되지 않고 정수로 저장된다. true는 정수 1이 되고 false는 정수 0이 된다. 마찬가지로 부울 값을 평가할 때도 "true" 또는 "false"가 아닌 정수 1(true), 0(false) 로 평가된다.
따라서 std::cout
을 이용해 부울 값을 출력하면 true는 1을 false는 0을 출력한다.
int main()
{
std::cout << true << std::endl;
std::cout << !true << std::endl;
bool b(false);
std::cout << b << std::endl;
std::cout << !b << std::endl;
return 0;
}
This outputs:
1
0
0
1
만약 std::cout
을 이용해 0 또는 1 대신 "true" 또는 "false"를 출력하려면 std::boolalpha
를 사용하면 된다.
#include <iostream>
int main()
{
std::cout << true << std::endl;
std::cout << false << std::endl;
std::cout << std::boolalpha;
std::cout << true << std::endl;
std::cout << false << std::endl;
return 0;
}
This outputs:
1
0
true
false
std:noboolalpha
를 이용해 다시 끌 수 있다.
if 문의 소개
부울 변수의 가장 일반적인 용도는 if 문이다. if 문은 아래와 같은 형식을 가진다.
if statement1;
or
if statement1;
else statement2;
if 문의 표현식(expression)을 조건(condition)
또는 조건 표현식(condition expression)
이라고 한다.
위 두 가지 형식 모두 표현식이 평가된다. 만약 표현식이 0이 아닌 값으로 평가되면 statement1이 실행된다. 두 번째 형식에서 표현식이 0으로 평가되면 statement2가 대신 실행된다.
예제 코드를 보자.
if (true)
std::cout << "The condition is true" << std::endl;
else
std::cout << "The condition is false" << std::endl;
This outputs:
The condition is true
위 프로그램이 어떻게 동작하는지 살펴보자. 첫 번째로, if 문의 조건 표현식을 평가한다. 표현식 true
는 0이 아닌 값 1로 평가되기 때문에 if 아래의 문(statement)이 실행된다.
bool b(false);
if (b)
std::cout << "b is true" << std::endl;
else
std::cout << "b is false" << std::endl;
This outputs:
b is false
위 프로그램에서 조건을 평가하면 변수 b가 평가되어 false
가 된다. false
는 값 0이다. 따라서 if 아래의 문은 실행되지 않지만, else
문이 실행된다.
여러개의 문 실행 (Executing multiple statements)
지금까지의 예제는 기본적인 형식으로, statement1과 statement2는 하나의 명령문만 실행할 수 있었다. 그러나 중괄호({})를 사용해서 여러 개의 명령문을 실행할 수 있다. 이를 블럭(block)이라고 한다.
if
{
statement1a;
statement1b;
}
or
if
{
statement1a;
statement1b;
}
else
{
statement2a;
statement2b;
}
예제:
if (true)
{
std::cout << "The condition is true" << std::endl;
std::cout << "And that's all, folks!" << std::endl;
}
else
std::cout << "The condition is false" << std::endl;
This outputs:
The condition is true
And that's all, folks!
좀 더 복잡한 예제:
#include <iostream>
int main()
{
std::cout << "Enter an integer: ";
int x;
std::cin >> x;
if (x == 0)
std::cout << "The value is zero" << std::endl;
else
std::cout << "The value is non-zero" << std::endl;
return 0;
}
Enter an integer: 4
The value is non-zero
동등 연산자(==)는 두 정수 값이 같은지 평가한다. 같으면 true를 반환하고 그렇지 않으면 false를 반환한다. 위 프로그램은 첫째, 정수값을 입력받는다. 다음으로, 동등 연산자(==)는 입력한 값이 0과 같은지 평가한다. 위 예제에서 4는 0과 같지 않으므로 false로 평가한다. 이로 인해 if 문을 실행할 경우 else 부분이 실행되어 "The value is non-zero"를 출력한다.
부울 반환 값 (Boolean return values)
부울 값은 어떤 것이 참(true)인지 아닌지 확인하는 함수의 반환 값으로도 사용된다. 이러한 기능을 가진 함수의 이름은 일반적으로 is나 has로 시작한다.
#include <iostream>
bool isEqual(int x, int y)
{
return (x == y);
}
int main()
{
std::cout << "Enter an integer: ";
int x;
std::cin >> x;
std::cout << "Enter another integer: ";
int y;
std::cin >> y;
if (isEqual(x, y))
std::cout << x << " and " << y << " are equal" << std::endl;
else
std::cout << x << " and " << y << " are not equal" << std::endl;
return 0;
}
Enter an integer: 5
Enter another integer: 5
5 and 5 are equal
std:cin
을 사용하여 부울 값을 입력할 수 있다.
int main()
{
bool b;
std::cout << "Enter a boolean value: ";
std::cin >> b;
std::cout << "You entered: " << b;
return 0;
}
Enter a boolean value: true
You entered: 119
부울 변수는 0 또는 1의 값만 입력이 허용된다. 다른 입력이 있으면 std::cin
은 실패한다. 위 프로그램의 경우 "true"를 입력했으므로 std:cin
이 자동으로 실패했고, 값을 b에 할당하지 않는다. 따라서 std::cout
는 변수 b에 대한 쓰레기 값(= 초기화되지 않은 값: garbage value)을 출력한다.
번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/26-boolean-values/ 입니다.