이 글의 작성자는 C/C++ 프로그래밍을 하던 사람이다. 이 글은 Python을 복습하며 작성하는 글이니, 부족한 부분이 있으면 얼마든지 피드백을 주시기 바란다.

 

불(bool) 타입

리스트/튜플 이야기를 하면서 불 타입에 대해 살짝 이야기 한 적이 있었다. 이번에 알아볼 논리연산은 불 타입을 사용하기 때문에 이 기회에 정식으로 짚고 넘어가도록 하자.

불 타입은 참과 거짓을 표현하는 데이터 형이다. 리스트/튜플 안에 특정 데이터가 있는가? 라고 물어봤을 때 불 데이터를 처음으로 봤었다. 찾고자 하는 데이터가 리스트 안에 있으면 True를 돌려줬고, 없으면 False를 돌려줬다.

명제를 배운 적이 있다면 이 명제는 참인가, 거짓인가? 라는 이야기를 들어본 적이 있을 것이다. 어떻게 보면 “리스트 a 안에 정수형 데이터 3이 들어있는가?”는 “리스트 a 안에 정수형 데이터 3이 들어있다 라는 명제는 참인가?” 로도 이해할 수 있을 것이다. 만약 3이 들어 있으면 이 명제는 참이 되므로 True가 되고, 들어 있지 않으면 이 명제는 거짓이 되므로 False가 된다. 그리고 그 명제가 참인지 거짓인지는 컴퓨터가 찾아보고 알려줄 것이다.

논리학에서는 참과 거짓 말고도 알수없음이 나올 수도 있다. 하지만 프로그래밍 세계에서 알수없음은 곧 에러를 의미한다. 따라서 불 타입은 참(True)과 거짓(False)만 존재한다. 참 거짓 이외에 딱히 표현할 게 없기 때문이다.

그리고 불 타입을 사용할때 주의해야 할 점이 하나 있다. 맨 앞글자는 대문자여야 한다. true와 false가 아니라, True와 False다.

그러면 불 데이터를 돌려주는 연산들은 어떤 것들이 있는지 알아보자.  

비교 연산자

두 객체를 비교하는 연산자다. 서로 비교할 수 있는 두 객체를 비교 연산자를 통해 비교하여 그 결과를 알려준다. 어떤 연산자들이 있는지 알아보자.

연산자는 객체가 있어야만 의미가 있으므로, 임시로 두 객체 a와 b를 집어넣도록 한다. 여기서 a와 b는 비교 가능한 두 객체라고 가정하자.  

  • a == b : a와 b는 같다

a의 값과 b의 값이 같으면 True, 아니면 False가 된다.

  • a != b : a와 b는 다르다

a의 값과 b의 값이 다르면 True, 아니면 False가 된다.
위의 == 연산과 정 반대의 결과를 돌려준다고 볼 수 있다.

  • a < b : a는 b보다 작다

a의 값이 b보다 작으면 True, 아니면 False가 된다.
수학적으로 표현하자면, a는 b 미만이라고 이야기 할 수 있겠다. a와 b의 값이 같으면 False가 된다. 값이 같은건 작은 것이 아니기 때문이다.

  • a <= b : a는 b보다 작거나 같다

a의 값이 b보다 작거나 같으면 True, 아니면 False가 된다.
수학적으로 표현하자면, a는 b 이하라고 이야기 할 수 있겠다. a와 b의 값이 같으면 True가 된다. 작거나 같기때문이다.

  • a > b : a는 b보다 크다
  • a >= b : a는 b보다 크거나 같다

위의 두 연산자에서 방향만 바꿔준 것이다.

  • a is b : a와 b가 가리키는 객체가 같다

a와 b가 가리키는 대상이 같다면 True, 아니면 False가 된다. 리스트 복사/할당하기 에서 본 적이 있을 것이다.

 

is 와 == 의 차이

== 연산자와 큰 차이를 느끼지 못할 수도 있다. 다음과 같이 테스트를 한다면 말이다.

>>> a = 3
>>> b = 3
>>> a == b
True
>>> a is b
True
>>> b = 5
>>> a == b
False
>>> a is b
False

하지만 다음과 같이 테스트를 하면 알게 될 것이다.

>>> a = [1,2,3]
>>> b = a.copy()
>>> a == b
True
>>> a is b
False

a와 b는 둘 다 똑같이 1,2,3을 가지고 있기 때문에 값은 같다. 하지만, 두 객체는 서로 다른 id를 가지고 있는 다른 객체이다.

>>> id(a)
53856424
>>> id(b)
62712040

정수형은 같은 값이면 같은 객체를 가지게 된다. 하지만 리스트는 그렇지 않다. 그래서 위와 같은 차이가 생기게 된 것이다.’

요약하자면, == 연산자는 값이 같은지에 대한 여부를 알려주고, is 연산자는 같은 객체를 바라보고 있는지에 대한 여부를 알려준다.

 

논리 연산자

불 타입 데이터를 이용한 연산자도 존재한다. 한 번 살펴보도록 하자.

 

  • a and b : a와 b가 둘 다 True인가?

a와 b가 둘 다 True라면 True를, 둘 중 하나라도 False라면 False가 된다.

>>> a = True
>>> b = True
>>> a and b
True
>>> b = False
>>> a and b
False
  • a or b : a와 b중 적어도 하나는 True인가?

a와 b중 하나라도 True라면 True를, 둘 다 False라면 False가 된다.

>>> a = True
>>> b = False
>>> a or b
True
>>> a = False
>>> a or b
False
  • not a : a가 아니다

이 연산자는 조금 특이하다. 보통 연산자는 두 개의 피연산자가 필요했지만, not 연산자는 하나의 피연산자만 있으면 된다. 그냥 a의 True/False를 뒤집어버리기 때문이다.

>>> a = True
>>> not a
False
>>> a = False
>>> not a
True

 

그렇다면 불 타입 데이터와 논리 연산자는 어디서 쓰일까? 다음 포스트의 주제인 조건문에서 먼저 만나볼 수 있다.

 

Categories:

Updated:

Comments