05-1 if문
윤혜민·박현규 · 23 / 30 절if문은 앞에서 살짝 살펴봤습니다. 그때 저는 if문을 문지기처럼 설명했죠. 하지만 if문은 문지기보다는 열차의 선로를 변경하는 선로 변경 레버를 연상하는 게 더 좋습니다. 다음은 유명한 도서 《정의란 무엇인가》에 등장하는 트롤리 딜레마입니다. 선로에 레버가 if문에 해당합니다.
[Note] 이미지는 나노바나나를 통해 만들었습니다.

선로에 서 있는 사람이 레버를 이용하여 열차의 방향을 결정합니다. 레버를 그대로 두면 트롤리가 직진하고, 아래로 당기면 선로를 바꿔 아래로 향합니다. 이렇게 코드의 흐름을 결정하는 것이 if문입니다. 이 개념을 머릿속에 넣어두고 기초 문법부터 응용까지 쭉 알아봅시다.
if문 기초 연습하기
if문은 조건에 따라 코드를 실행할지 말지 결정하는 제어문입니다. if문의 기본 구조는 다음과 같습니다.
if 조건식:
들여쓰기 한 코드
들여쓰기 한 코드
들여쓰기 한 코드
if와 콜론 사이에 조건식입력하고, :로 if문을 마무리한 다음 들여쓰기를 일정하게 맞추어 코드를 입력합니다. 이때 들여쓰기한 코드들은 코드 블록이라고 부릅니다. 코드 블록은 조금 이따 다시 알아보겠습니다. 지금은 조건식을 이해하는 것이 중요합니다. 조건식은 True, False로 치환될 수 있어야 합니다. 다음 코드를 봅시다. 코드에 하이라이트로 표시한 것이 True나 False로 치환될 수 있는 조건식입니다. 변수와 25를 >=로 비교하고 있습니다. 기초 수학 지식이 있다면 직관적으로 True로 치환될 것임을 알 수 있습니다.
temperature = 35
if <span class="mark">temperature >= 25</span>:
print("에어컨을 켭니다")
print("시원하게 보내세요")
[실행 결과]
에어컨을 켭니다
시원하게 보내세요
실제로 코드를 실행하면 temperature의 값이 35이므로 temperature >= 25라는 조건식은 True로 치환되므로 들여쓰기 한 if문의 코드 블록을 모두 실행합니다.
코드 블록 개념 알아보기
이때 : 다음에 들여쓰기로 일정하게 정리한 코드를 코드 블록이라고 부릅니다. 그래서 : 다음에 들여쓰기로 정리한 코드끼리 따로 실행되는 특징이 있습니다. 예를 들어 다음과 같이 코드를 작성하면 첫 번째 if문의 코드 블록과 두 번째 if문의 코드 블록은 별도입니다. 각각의 코드 블록을 하이라이트로 칠했습니다.
x = 6
# if문의 코드 블록
if x > 0:
print("양수입니다") # 이 줄과
print("0보다 큽니다") # 이 줄이 하나의 블록
# if문의 코드 블록
if x > 5:
print(f"x의 값은 {x}입니다") # 이 줄과
print("5보다 큽니다") # 이 줄이 또 하나의 블록
[실행 결과]
양수입니다
0보다 큽니다
x의 값은 6입니다
5보다 큽니다
코드 블록은 직관적으로 이해하기에 크게 어렵지 않을 겁니다. 코드 블록은 들여쓰기를 같은 개수로 하기만 하면 됩니다. 파이썬에서는 4개를 권장하지만 2개를 해도, 3개를 해도 간격만 같으면 같은 코드 블록으로 간주합니다. if문부터 들여쓰기와 코드 블록을 자연스럽게 계속 사용하겠습니다.
if~else문 연습하기
앞에서 공부한 if문은 조건식이 True이면 코드 블록을 실행할 수 있었습니다. 앞에서 if문을 비유로 설명할 때 트롤리 딜레마 그림을 예로 들었지만 if문은 그림과 딱 맞는 건 아닙니다. 왜냐하면 조건식이 True일 때만 처리하기 때문입니다. 만약 조건식이 False인 것도 처리하고 싶다면 이렇게 하면 됩니다.
age = 15
if age >= 18:
print("성인입니다. 입장 가능합니다.")
else:
print("미성년자입니다. 입장이 제한됩니다.")
[실행 결과]
미성년자입니다. 입장이 제한됩니다.
실행 결과를 보면 age가 15이므로 if문의 표현식은 False입니다. 따라서 if문의 코드 블록은 건너뛰고 else문의 코드 블록을 실행합니다.

if문만 사용해도 되는 거 아닌가요?
그러면 'if문만 사용하고 print("미성년자입니다. 입장이 제한됩니다.")는 if문 바깥으로 빼면 안될까?'라고 생각하는 사람이 있을 수도 있습니다. 좋은 질문입니다. 이렇게 해도 방금 작성한 if~else문과 동일한 효과를 낼 수 있습니다.
age = 15
if age >= 18:
print("성인입니다. 입장 가능합니다.")
print("미성년자입니다. 입장이 제한됩니다.")
[실행 결과]
미성년자입니다. 입장이 제한됩니다.
언뜻보면 이렇게 해도 될 것 같습니다. 하지만 age를 20으로 바꿔서 실행해보면 문제가 드러납니다.
age = 20
if age >= 18:
print("성인입니다. 입장 가능합니다.")
print("미성년자입니다. 입장이 제한됩니다.")
[실행 결과]
성인입니다. 입장 가능합니다.
미성년자입니다. 입장이 제한됩니다.
이렇게 하니 조건식을 만족하여 if문의 코드 블록을 실행 한 후 if문 바깥에 있는 코드를 실행하여 두 메시지가 모두 출력되었습니다. if문 바깥에 있는 코드는 if문과 상관 없이 실행되므로 의도하지 않은 실행 결과가 출력되었습니다. 그래서 if~else문을 사용하는 것입니다. 조건에 따라 if문의 코드 블록 또는 else문의 코드 블록을 실행하므로 프로그램의 흐름을 완벽하게 가를 수 있습니다.
if~else문 응용 연습하기
ifelse문은 실생활의 다양한 판단 상황을 프로그램으로 만들 때 유용합니다. 이번에는 좀 더 실용적인 예제들로 연습해보겠습니다. 온라인 쇼핑몰에서 배송비를 계산하는 프로그램을 만들어봅시다. 보통 일정 금액 이상 구매하면 무료 배송을 해주는데, 이런 로직을 ifelse문으로 표현할 수 있습니다. 다음 코드를 입력해서 실행해보면 구매 금액에 따라 배송비가 자동으로 계산되는 것을 알 수 있을 겁니다.
purchase_amount = 35000
free_shipping_threshold = 50000
if purchase_amount >= free_shipping_threshold:
shipping_fee = 0
print(f"구매금액: {purchase_amount:,}원")
print("무료배송입니다!")
else:
shipping_fee = 3000
print(f"구매금액: {purchase_amount:,}원")
print(f"배송비: {shipping_fee:,}원이 추가됩니다.")
total = purchase_amount + shipping_fee
print(f"총 결제금액: {total:,}원")
[실행 결과]
구매금액: 35,000원
배송비: 3,000원이 추가됩니다.
총 결제금액: 38,000원
구매 금액이 35,000원이므로 무료 배송 기준인 50,000원에 미치지 못해 배송비 3,000원이 추가되었습니다. ifelse문을 자세히 보면 shipping_fee는 if문 코드 블록에서는 0으로 처리하고 else문 코드 블록에서는 3000으로 처리한 뒤 ifelse문 바깥에서 총 결제 금액에 무조건 더하는 용도로 사용하고 있습니다. 이렇게 if~else문은 프로그램의 흐름을 결정해야 할 때 아주 유용합니다.
ifelifelse문 연습하기
ifelse문은 두 가지 중 하나를 선택하는 구조였습니다. 하지만 실생활에서는 세 가지 이상의 선택지가 필요한 경우가 많습니다. 그럴 때는 ifelifelse문을 사용합니다. elif는 else if의 줄임말로 '앞의 조건이 거짓이면 이 조건을 확인해봐'라는 의미입니다. ifelif~else문으로 간단한 코드를 작성해 동작을 확인해봅시다. 다음은 score에 입력한 점수를 검사해서 학점을 출력하는 프로그램입니다.
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"점수: {score}점")
print(f"학점: {grade}")
[실행 결과]
점수: 85점
학점: B
점수가 85점이므로 첫 번째 조건 score >= 90의 평가값이 False입니다. 그래서 다음 조건인 score >= 80을 평가하고 평가값이 True이므로 grade에 "B"가 저장됩니다. 이때 ifelifelse문은 조건식 중 하나가 True로 평가되어 들여쓰기 안의 코드가 실행되면 나머지 elif와 else는 모두 건너뛰는 특성이 있습니다. 쉽게 생각해서 여러 조건 중 딱 하나만 실행한다고 이해하면 됩니다. 다른 실행 결과를 얻고 싶다면 처음 실행하는 score=85를 다른 값으로 바꿔보세요. ifelifelse문은 따로 응용 연습을 할 필요가 없을 겁니다.
ifelifelse문에서는 else를 생략할 수도 있습니다
ifelifelse문에서 else는 모든 조건이 거짓이면 실행하는 부분입니다. 때로는 특정 조건들만 처리하고 나머지 조건에서는 아무것도 처리하고 싶지 않을 때도 있습니다. 그럴 때는 else를 생략할 수 있습니다. 앞에서 작성한 코드를 다음과 같이 수정해서 실행해봅시다.
score = 95
if score >= 90:
print("우수 학생입니다!")
print("장학금 대상자로 선정되었습니다.")
elif score >= 80:
print("좋은 성적입니다!")
print("성적 향상 프로그램에 참여할 수 있습니다.")
print(f"점수: {score}점")
[실행 결과]
우수 학생입니다!
장학금 대상자로 선정되었습니다.
점수: 95점
점수가 95점이므로 첫 번째 조건식이 True가 되어 메시지가 출력되었습니다. 80점 미만인 경우는 특별히 처리할 필요가 없어서 else를 생략했습니다. 점수를 75로 바꿔보면 다음과 같이 실행될 겁니다.
[Note] 코드는 생략했습니다.
[실행 결과]
점수: 75점
지금까지 if문, ifelse문, ifelif~else문을 모두 공부했습니다. 각각의 문법은 검사 조건 갯수에 따라 알맞게 사용하면 됩니다. 이정도면 충분히 공부한 것 같네요. 그럼 계속해서 다음으로 나아가봅시다.
