파이썬 교육 챕터 10 불리언과 논리 연산

불리언(Boolean)과 논리 연산: 프로그램의 의사결정 엔진

1. 서론: 참과 거짓, 프로그램의 논리적 판단

프로그래밍은 단순히 데이터를 저장하고 연산하는 것을 넘어, 특정 조건에 따라 다른 동작을 수행하는 ‘의사결정’ 과정을 포함합니다. 예를 들어, 사용자가 입력한 비밀번호가 올바른지 확인하거나, 특정 재고가 남아있는지 여부에 따라 상품 판매를 결정하는 것과 같은 상황들이죠. 이러한 논리적인 판단을 가능하게 하는 것이 바로 ‘불리언(Boolean)’ 자료형과 ‘논리 연산(Logical Operations)’입니다. 불리언은 오직 True(참)와 False(거짓) 두 가지 값만을 가지며, 논리 연산자는 이 불리언 값들을 조합하여 더 복잡한 조건을 만들고 판단할 수 있도록 돕습니다. 이 챕터에서는 파이썬의 불리언 자료형의 기본 개념부터 시작하여, and, or, not과 같은 핵심 논리 연산자들의 사용법과 그 중요성에 대해 깊이 있게 탐구해 보겠습니다. 불리언과 논리 연산을 마스터하는 것은 여러분의 파이썬 프로그램에 지능적인 판단 능력을 부여하는 첫걸음이 될 것입니다.

2. 불리언(Boolean) 자료형: 참 또는 거짓

불리언 자료형은 컴퓨터 과학의 아버지 중 한 명인 조지 불(George Boole)의 이름을 따서 명명되었습니다. 파이썬에서 불리언 값은 TrueFalse 두 가지뿐입니다. 이 값들은 대소문자를 구분하며, 반드시 첫 글자는 대문자로 작성해야 합니다.

is_active = True
has_permission = False

print(is_active)        # 출력: True
print(has_permission)   # 출력: False
print(type(is_active))  # 출력: <class 'bool'>

2.1. 비교 연산자와 불리언 값

불리언 값은 주로 비교 연산의 결과로 얻어집니다. 비교 연산자는 두 값의 관계를 평가하여 True 또는 False를 반환합니다.

연산자 설명 예시 결과
== 같다 5 == 5 True
!= 같지 않다 5 != 10 True
> 크다 10 > 5 True
< 작다 5 < 10 True
>= 크거나 같다 10 >= 10 True
<= 작거나 같다 5 <= 10 True

예시:

num1 = 10
num2 = 20

print(num1 == num2) # 출력: False
print(num1 != num2) # 출력: True
print(num1 < num2)  # 출력: True
print(num1 >= num2) # 출력: False

text1 = "apple"
text2 = "banana"

print(text1 == text2) # 출력: False
print(text1 != text2) # 출력: True
print(text1 > text2)  # 출력: False (알파벳 순서 비교)

2.2. 불리언으로 간주되는 값 (Truthiness and Falsiness)

파이썬에서는 불리언 값이 아닌 다른 자료형의 값들도 조건문 등에서 불리언처럼 True 또는 False로 간주될 수 있습니다. 이를 ‘진실성(Truthiness)’과 ‘거짓성(Falsiness)’이라고 합니다.

False로 간주되는 값 (Falsy Values):

  • None
  • False
  • 숫자 0 (정수, 실수, 복소수 모두)
  • 빈 문자열 ("")
  • 빈 리스트 ([])
  • 빈 튜플 (())
  • 빈 딕셔너리 ({})
  • 빈 셋 (set())

True로 간주되는 값 (Truthy Values):

  • 위의 False로 간주되는 값을 제외한 모든 값은 True로 간주됩니다.
    • 예: 1, -10, 3.14, "Hello", [1, 2], {'key': 'value'}
print(bool(0))        # 출력: False
print(bool(1))        # 출력: True
print(bool(""))       # 출력: False
print(bool(" "))      # 출력: True (공백도 문자열)
print(bool([]))       # 출력: False
print(bool([1, 2]))   # 출력: True
print(bool(None))     # 출력: False

이러한 진실성과 거짓성 개념은 조건문(if 문)에서 매우 유용하게 사용됩니다.

3. 논리 연산자 (Logical Operators): 조건 조합하기

논리 연산자는 불리언 값들을 조합하여 더 복잡한 논리적 조건을 만들 때 사용됩니다. 파이썬에는 and, or, not 세 가지 논리 연산자가 있습니다.

3.1. and 연산자 (논리곱)

and 연산자는 두 조건이 모두 True일 때만 True를 반환합니다. 둘 중 하나라도 False이면 False를 반환합니다.

조건1 조건2 조건1 and 조건2
True True True
True False False
False True False
False False False

예시:

age = 25
has_license = True

# 나이가 20세 이상이고 면허가 있는 경우
if age >= 20 and has_license:
    print("운전 가능합니다.")
else:
    print("운전 불가능합니다.")
# 출력: 운전 가능합니다.

score = 85
attendance = 90

# 점수가 80점 이상이고 출석률이 85% 이상인 경우
if score >= 80 and attendance >= 85:
    print("합격입니다.")
else:
    print("불합격입니다.")
# 출력: 합격입니다.

3.2. or 연산자 (논리합)

or 연산자는 두 조건 중 하나라도 True이면 True를 반환합니다. 두 조건이 모두 False일 때만 False를 반환합니다.

조건1 조건2 조건1 or 조건2
True True True
True False True
False True True
False False False

예시:

is_weekend = False
is_holiday = True

# 주말이거나 공휴일인 경우
if is_weekend or is_holiday:
    print("쉬는 날입니다.")
else:
    print("일하는 날입니다.")
# 출력: 쉬는 날입니다.

item_count = 0
is_vip = True

# 아이템 개수가 0보다 크거나 VIP 회원인 경우
if item_count > 0 or is_vip:
    print("할인 적용 대상입니다.")
else:
    print("할인 적용 대상이 아닙니다.")
# 출력: 할인 적용 대상입니다.

3.3. not 연산자 (논리 부정)

not 연산자는 불리언 값을 반대로 뒤집습니다. TrueFalse로, FalseTrue로 만듭니다.

조건 not 조건
True False
False True

예시:

is_logged_in = False

# 로그인되어 있지 않은 경우
if not is_logged_in:
    print("로그인이 필요합니다.")
else:
    print("환영합니다.")
# 출력: 로그인이 필요합니다.

# 리스트가 비어있지 않은 경우
my_list = [1, 2, 3]
if not not my_list: # not my_list는 False, not False는 True
    print("리스트에 요소가 있습니다.")
# 출력: 리스트에 요소가 있습니다.

4. 논리 연산자의 단축 평가 (Short-circuit Evaluation)

파이썬의 andor 연산자는 ‘단축 평가(Short-circuit Evaluation)’라는 특징을 가집니다. 이는 연산의 결과를 결정하는 데 필요한 최소한의 부분만 평가한다는 의미입니다.

  • and 연산자: 첫 번째 조건이 False이면, 두 번째 조건은 평가하지 않고 바로 False를 반환합니다. (어차피 결과는 False이므로)
  • or 연산자: 첫 번째 조건이 True이면, 두 번째 조건은 평가하지 않고 바로 True를 반환합니다. (어차피 결과는 True이므로)
def check_condition1():
    print("Condition 1 evaluated")
    return False

def check_condition2():
    print("Condition 2 evaluated")
    return True

# and 연산자 단축 평가
print("--- and short-circuit ---")
result_and = check_condition1() and check_condition2()
print(result_and)
# 출력:
# Condition 1 evaluated
# False (check_condition2는 실행되지 않음)

# or 연산자 단축 평가
def check_condition3():
    print("Condition 3 evaluated")
    return True

def check_condition4():
    print("Condition 4 evaluated")
    return False

print("--- or short-circuit ---")
result_or = check_condition3() or check_condition4()
print(result_or)
# 출력:
# Condition 3 evaluated
# True (check_condition4는 실행되지 않음)

단축 평가는 코드의 효율성을 높이는 데 기여하며, 특정 조건이 만족될 때만 다음 코드를 실행해야 하는 경우에 유용하게 사용될 수 있습니다.

5. 논리 연산자와 다른 연산자의 우선순위

논리 연산자도 다른 연산자들과 마찬가지로 우선순위가 있습니다. 일반적으로 not이 가장 높고, and가 그다음, or가 가장 낮습니다.

  • not (가장 높음)
  • and
  • or (가장 낮음)

괄호 ()를 사용하여 우선순위를 명시적으로 지정하거나 변경할 수 있습니다.

# 예시: not > and > or
result = True or False and not True
# 1. not True -> False
# 2. False and False -> False
# 3. True or False -> True
print(result) # 출력: True

# 괄호를 사용하여 우선순위 변경
result_with_parentheses = (True or False) and not True
# 1. (True or False) -> True
# 2. not True -> False
# 3. True and False -> False
print(result_with_parentheses) # 출력: False

6. 결론: 프로그램의 논리적 흐름을 제어하는 핵심

이 챕터를 통해 여러분은 파이썬의 불리언 자료형과 논리 연산자에 대해 깊이 있게 학습했습니다. TrueFalse라는 두 가지 값으로 프로그램의 논리적 판단을 표현하는 불리언의 개념을 이해하고, 비교 연산자를 통해 불리언 값을 얻는 방법을 배웠습니다. 또한, and, or, not이라는 세 가지 논리 연산자를 사용하여 복잡한 조건을 조합하고, 단축 평가의 원리까지 살펴보았습니다.

불리언과 논리 연산은 앞으로 배우게 될 조건문(if 문)과 반복문(for, while 문)에서 프로그램의 흐름을 제어하는 데 핵심적인 역할을 합니다. 여러분이 작성하는 모든 프로그램은 어떤 형태로든 논리적인 판단을 필요로 할 것이며, 이때 불리언과 논리 연산은 여러분의 프로그램에 지능적인 의사결정 능력을 부여하는 엔진이 될 것입니다.

이제 여러분은 파이썬의 기본적인 자료형인 숫자, 문자열, 그리고 불리언을 다룰 수 있게 되었습니다. 다음 챕터에서는 코드의 가독성을 높이고 설명을 추가하는 데 필수적인 ‘주석(Comment)’에 대해 알아보겠습니다. 주석은 여러분의 코드를 다른 사람뿐만 아니라 미래의 자신도 쉽게 이해할 수 있도록 돕는 중요한 도구입니다.

파이썬 교육 챕터 10 불리언과 논리 연산