프로그래밍에게 필수적인 개념 중 하나로 조건문이 있다. 대표적으로 뒤에서 다룰 if문이 있다. 이러한 조건문은 특별한 경우에만 실행되어야 하는 코드를 구분시키기 위해 사용된다. 모바일 어플리케이션을 예로 들어 보겠다.
이처럼 어떤 대상의 상태를 확인하고, 상황에 맞게 코드를 실행하게 만드는 것은 프로그래밍에서 매우 중요하다. 조건 만족의 여부를 표현하기 위해서는 참과 거짓을 의미하는 값이 필요하고, 이를 위해 파이썬에서는 bool 타입을 사용할 수 있다.
bool 타입으로 유효한 값은 True와 False 뿐이다. 각각 참과 거짓을 나타내며, 따옴표와 같은 특별한 데코레이션 없이 표현한다.
print(True)
print(False)
결과
True
False
bool 타입의 변수는 명사나 명사구 형태로 이름을 짓기에 의미가 어긋나는 경우가 많다. 따라서, is + 명사 형태로 이름짓는 것이 보통이다. PEP 8에는 이와 관련해서 언급이 따로 없으나, 프로그래밍 세계의 일반적인 관례가 이어진 것이라고 보면 된다. 상황에 따라 can, should같은 조동사나 has, 또는 includes같은 동사원형으로 시작하는 용법을 사용하기도 한다. 이 부분은 영문법에 해당하는 부분이므로, 구체적인 설명은 생략한다.
대부분의 언어에서, bool 타입의 상수에 true와 false처럼 소문자로 이루어진 이름을 사용한다. 그러나 파이썬은 대문자로 시작하는 이름인 True, False를 사용하고 있다.
그 이유는 파이썬에 bool 타입을 추가하는 과정에서 작성된 PEP 285 - Adding a bool type에 작성되어 있다. 파이썬에 bool이 추가되던 당시, 빌트인 상수들이 모두 대문자로 시작하는 이름을 가지고 있었기 때문이다. 파이썬 내에서의 일관성을 유지하기 위한 선택이었다.
print(True, False, None, NotImplemented, Ellipsis)
결과
True False None NotImplemented Ellipsis
bool 클래스는 int 클래스를 상속한다.
print(issubclass(bool, int)))
결과
True
True와 False는 대부분의 연산에서 각각 정수 1과 0처럼 작동한다.
print(True == 1)
print(False == 0)
print() # 출력 결과 가독성을 위한 개행
print(True - 1)
print(True * 5)
print(True - 0.5)
print(False + 1)
print(False * 5)
print() # 출력 결과 가독성을 위한 개행
print(True > 0.5 > False)
print('hello' * True)
결과
True
True
0
5
0.5
1
0
True
hello
bool 타입은 언어가 탄생한 이후 새롭게 추가된 타입이다. 그 전까지는 정수 1과 0을 통해 참과 거짓을 표현했다. 따라서, True와 False는 연산에서 각각 1과 0처럼 동작해야 했다. 참과 거짓을 1과 0으로 판단하는 코드에, bool 타입의 값이 사용되어도 동작이 동일해야 하기 때문이다. 이러한 하위호환성을 유지하기 위해, 독립된 타입을 만드는 것보다 int를 상속해 구현하는 것이 훨씬 간단하다는 결정이었다.