[파이썬 튜토리얼] bool 타입

PlanB·2022년 10월 4일
3

파이썬 튜토리얼

목록 보기
14/21

Level 1

프로그래밍에게 필수적인 개념 중 하나로 조건문이 있다. 대표적으로 뒤에서 다룰 if문이 있다. 이러한 조건문은 특별한 경우에만 실행되어야 하는 코드를 구분시키기 위해 사용된다. 모바일 어플리케이션을 예로 들어 보겠다.

  • 지도 앱을 켰을 때, GPS가 켜져 있으면 현재 위치를 기준으로 지도를 보여주고, GPS가 꺼져 있으면 'GPS를 켜달라'는 알림을 노출한다.
  • 온라인 쇼핑몰에서 상품을 장바구니에 추가할 때, 사용자가 로그인되어 있으면 장바구니에 상품을 추가하고, 그렇지 않으면 로그인 화면으로 이동시킨다.

이처럼 어떤 대상의 상태를 확인하고, 상황에 맞게 코드를 실행하게 만드는 것은 프로그래밍에서 매우 중요하다. 조건 만족의 여부를 표현하기 위해서는 참과 거짓을 의미하는 값이 필요하고, 이를 위해 파이썬에서는 bool 타입을 사용할 수 있다.

bool 타입으로 유효한 값은 TrueFalse 뿐이다. 각각 참과 거짓을 나타내며, 따옴표와 같은 특별한 데코레이션 없이 표현한다.

print(True)
print(False)

결과

True
False

조언

  • 조건문에 대해 설명한 부분을 이해하지 못해도 괜찮다. 참과 거짓의 판별이 필요한 이유와, 이들을 파이썬에서 어떻게 표현하는지만 알고 넘어가면 된다.

Level 2

bool 타입 변수의 네이밍 컨벤션

bool 타입의 변수는 명사나 명사구 형태로 이름을 짓기에 의미가 어긋나는 경우가 많다. 따라서, is + 명사 형태로 이름짓는 것이 보통이다. PEP 8에는 이와 관련해서 언급이 따로 없으나, 프로그래밍 세계의 일반적인 관례가 이어진 것이라고 보면 된다. 상황에 따라 can, should같은 조동사나 has, 또는 includes같은 동사원형으로 시작하는 용법을 사용하기도 한다. 이 부분은 영문법에 해당하는 부분이므로, 구체적인 설명은 생략한다.

주 : Bool 변수 이름 제대로 짓기 위한 최소한의 영어 문법

Level 3

상수가 대문자로 시작하는 이유

대부분의 언어에서, bool 타입의 상수에 truefalse처럼 소문자로 이루어진 이름을 사용한다. 그러나 파이썬은 대문자로 시작하는 이름인 True, False를 사용하고 있다.

그 이유는 파이썬에 bool 타입을 추가하는 과정에서 작성된 PEP 285 - Adding a bool type에 작성되어 있다. 파이썬에 bool이 추가되던 당시, 빌트인 상수들이 모두 대문자로 시작하는 이름을 가지고 있었기 때문이다. 파이썬 내에서의 일관성을 유지하기 위한 선택이었다.

print(True, False, None, NotImplemented, Ellipsis)

결과

True False None NotImplemented Ellipsis

bool은 int의 서브클래스

bool 클래스는 int 클래스를 상속한다.

print(issubclass(bool, int)))

결과

True

True와 False는 대부분의 연산에서 각각 정수 10처럼 작동한다.

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 타입은 언어가 탄생한 이후 새롭게 추가된 타입이다. 그 전까지는 정수 10을 통해 참과 거짓을 표현했다. 따라서, TrueFalse는 연산에서 각각 10처럼 동작해야 했다. 참과 거짓을 1과 0으로 판단하는 코드에, bool 타입의 값이 사용되어도 동작이 동일해야 하기 때문이다. 이러한 하위호환성을 유지하기 위해, 독립된 타입을 만드는 것보다 int를 상속해 구현하는 것이 훨씬 간단하다는 결정이었다.

profile
백엔드를 주로 다룹니다. 최고가 될 수 없는 주제로는 글을 쓰지 않습니다.

0개의 댓글