프로그래밍은 단순히 명령을 순서대로 실행하는 것을 넘어, 특정 조건에 따라 다른 동작을 수행해야 할 때 진정한 힘을 발휘합니다. 이번 챕터에서는 파이썬에서 프로그램의 흐름을 제어하는 가장 기본적인 도구인 조건문 `if`, `elif`, `else`에 대해 자세히 알아보겠습니다. 이 조건문들을 통해 여러분의 파이썬 프로그램이 더욱 ‘똑똑하게’ 판단하고 동작하도록 만들 수 있습니다.
핵심 요약
- if 문: 특정 조건이 참일 때 코드 블록을 실행합니다.
- else 문: `if` 조건이 거짓일 때 대체 코드 블록을 실행합니다.
- elif 문: 여러 조건을 순차적으로 확인하여 해당하는 코드 블록을 실행합니다.
- 들여쓰기: 파이썬 조건문에서 코드 블록을 구분하는 중요한 요소입니다.
- 실용성: 데이터 처리, 자동화, GUI 등 다양한 분야에서 프로그램의 유연성을 높이는 필수적인 문법입니다.
파이썬 조건문, 왜 중요할까요?
결론: 파이썬 조건문은 프로그램이 다양한 상황에 따라 다르게 동작하도록 만드는 핵심적인 도구입니다.
우리의 일상생활에서 ‘만약 ~라면, ~할 것이다’와 같은 조건부 판단은 끊임없이 일어납니다. ‘만약 비가 오면 우산을 가져간다’, ‘만약 배고프면 밥을 먹는다’ 처럼요. 프로그램도 마찬가지입니다. 특정 데이터 값에 따라, 사용자 입력에 따라, 혹은 시스템 상태에 따라 다른 작업을 수행해야 할 때가 많습니다. 예를 들어, 사용자가 입력한 숫자가 양수인지 음수인지 판단하거나, 로그인 시 아이디와 비밀번호가 맞는지 검사하는 등의 상황에서 조건문이 필수적으로 사용됩니다. 제가 취미로 자동화 스크립트를 만들거나 현업에서 데이터 분석 툴을 개발할 때, 전체 코드의 70% 이상은 이 조건문을 활용한다고 해도 과언이 아닙니다. 조건문 없이는 유연하고 지능적인 프로그램을 만들 수 없습니다.
if 문: ‘만약 ~라면’ 실행하기
결론: `if` 문은 특정 조건이 참(True)일 때만 코드 블록을 실행하도록 합니다.
`if` 문은 가장 기본적인 조건문입니다. 주어진 조건식이 참(True)일 경우에만 `if` 문 아래에 속한 코드 블록을 실행합니다. 조건식 뒤에는 반드시 콜론(`:`)을 붙여야 하며, `if` 문에 속하는 코드는 반드시 들여쓰기(일반적으로 공백 4칸)를 해야 합니다. 파이썬에서 들여쓰기는 코드의 구조를 나타내는 중요한 문법 요소입니다.
다음은 `if` 문의 기본적인 형태와 예시입니다.
age = 20
if age >= 18:
print("성인입니다.") # 들여쓰기된 부분
print("운전면허를 취득할 수 있습니다.")
print("프로그램 종료.")
이 코드가 하는 일: `age` 변수의 값이 18 이상인지 확인하고, 그렇다면 ‘성인입니다.’와 ‘운전면허를 취득할 수 있습니다.’를 출력합니다. 조건이 거짓이라면 이 두 문장은 건너뛰고 바로 ‘프로그램 종료.’가 출력됩니다. 여기서 `age >= 18`과 같은 표현을 비교 연산자라고 하며, 이들이 `True`나 `False` 값을 반환하여 `if` 문의 조건을 결정합니다.
else 문: ‘그렇지 않다면’ 실행하기
결론: `else` 문은 `if` 문의 조건이 거짓(False)일 때 대체 코드를 실행할 수 있게 합니다.
`if` 문만으로는 ‘만약 ~라면’에 대한 처리만 가능하고, ‘그렇지 않다면’에 대한 처리는 할 수 없습니다. 이때 `else` 문이 필요합니다. `else` 문은 `if` 문의 조건이 거짓으로 판명되었을 때 실행될 코드 블록을 정의합니다. `else` 문은 조건식을 가지지 않으며, 반드시 `if` 문 뒤에 와야 합니다.
다음 예시를 통해 `else` 문의 활용법을 살펴보겠습니다.
temperature = 25
if temperature > 30:
print("매우 덥습니다. 에어컨을 켜세요!")
else:
print("쾌적한 날씨입니다.")
print("오늘의 기온 예보.")
이 코드가 하는 일: `temperature`가 30보다 큰지 확인합니다. 만약 30보다 크다면 첫 번째 메시지를 출력하고, 그렇지 않다면 (즉, 30 이하일 경우) 두 번째 메시지를 출력합니다.
elif 문: 다양한 조건 처리하기
결론: `elif` 문은 여러 조건을 순차적으로 확인하여, 해당 조건이 참일 때마다 특정 코드 블록을 실행합니다.
때로는 ‘만약 ~라면’, ‘그렇지 않다면’으로 부족할 때가 있습니다. ‘만약 A라면 ~’, ‘그렇지 않고 만약 B라면 ~’, ‘그것도 아니라면 ~’과 같이 여러 개의 조건을 순차적으로 검사해야 할 때 `elif` (else if의 줄임말) 문을 사용합니다. `elif` 문은 여러 개를 연속해서 사용할 수 있으며, `else` 문은 모든 `if` 및 `elif` 조건이 거짓일 때 마지막으로 실행됩니다.
학생의 점수에 따라 학점을 부여하는 예시로 `elif` 문을 이해해봅시다.
score = 85
if score >= 90:
print("학점: A")
elif score >= 80: # 90 미만이고 80 이상일 경우
print("학점: B")
elif score >= 70: # 80 미만이고 70 이상일 경우
print("학점: C")
else:
print("학점: F")
print("학점 계산 완료.")
이 코드가 하는 일: `score` 변수의 값에 따라 학점을 판별합니다. 위에서부터 순서대로 조건을 검사하여, 먼저 참이 되는 조건의 코드 블록만 실행하고 나머지 `elif`와 `else` 블록은 건너뜁니다. 예를 들어 `score`가 85이므로, 첫 번째 `if score >= 90`은 거짓이고, 두 번째 `elif score >= 80`은 참이 되어 ‘학점: B’가 출력됩니다. 이처럼 `elif`는 복잡한 조건 분기에서 매우 유용합니다.
조건문 작성 시 흔한 실수와 해결법
결론: 파이썬 조건문에서 자주 발생하는 실수로는 잘못된 들여쓰기, 부적절한 비교 연산자 사용, 그리고 조건 순서 오류 등이 있습니다.
파이썬을 처음 배우시는 분들이 가장 많이 겪는 문제 중 하나는 바로 들여쓰기 오류입니다. 파이썬은 C++이나 Java처럼 중괄호 `{}`를 사용하지 않고 들여쓰기로 코드 블록을 구분합니다. 만약 들여쓰기를 잘못하면 `IndentationError`가 발생하거나, 예상과 다르게 코드가 동작할 수 있습니다. 항상 공백 4칸으로 일관되게 들여쓰기를 하는 것이 중요합니다.
두 번째 흔한 실수는 비교 연산자를 혼동하는 것입니다. 예를 들어, 같음을 비교할 때는 `=`가 아닌 `==`를 사용해야 합니다. `=`는 할당 연산자이므로 주의해야 합니다. 또한, 여러 조건을 조합할 때는 `and`, `or`, `not` 같은 논리 연산자를 정확하게 사용하는 것이 중요합니다. 저도 한때 `if x = 10:` 이라고 실수로 코딩했다가 에러를 낸 경험이 있습니다.
마지막으로, `elif` 문의 조건 순서도 중요합니다. 위 학점 예시에서 `elif score >= 80`이 `if score >= 90`보다 먼저 오게 되면, 90점 이상인 학생도 80점 이상 조건에서 먼저 걸려 ‘B’ 학점을 받게 됩니다. 항상 가장 구체적이거나 범위가 좁은 조건을 먼저 배치하는 것이 좋습니다.
실전 예제: 간단한 날씨 알리미 프로그램
결론: `if-elif-else` 구조를 활용하면 사용자의 입력에 따라 동적으로 다른 메시지를 출력하는 프로그램을 만들 수 있습니다.
이제 배운 `if-elif-else` 문을 활용하여 간단한 날씨 알리미 프로그램을 만들어 봅시다. 사용자로부터 현재 온도를 입력받아 적절한 메시지를 출력하는 프로그램입니다.
# 사용자로부터 현재 온도를 입력받습니다.
temperature_str = input("현재 온도를 입력하세요: ")
try:
temperature = int(temperature_str)
except ValueError:
print("잘못된 입력입니다. 숫자를 입력해주세요.")
exit() # 프로그램 종료
if temperature >= 30:
print("매우 더운 날씨입니다! 시원한 물을 자주 마시고 외출을 자제하세요.")
elif temperature >= 25:
print("더운 날씨입니다. 가벼운 옷차림과 수분 섭취에 신경 써주세요.")
elif temperature >= 15:
print("쾌적한 봄/가을 날씨입니다. 야외 활동하기 좋습니다.")
elif temperature >= 5:
print("쌀쌀한 날씨입니다. 따뜻한 옷을 챙기세요.")
else:
print("추운 날씨입니다! 방한용품을 꼭 착용하고 동상에 주의하세요.")
print("오늘도 좋은 하루 보내세요!")
이 코드가 하는 일: 사용자에게 온도를 입력받아 정수로 변환합니다. `try-except` 블록은 숫자가 아닌 다른 입력에 대한 예외 처리를 해줍니다. 이후 `if-elif-else` 문을 사용하여 입력된 온도에 따라 다른 조언 메시지를 출력합니다. 이처럼 실제 프로그램에서는 사용자의 입력이나 외부 환경에 따라 유연하게 대응해야 할 때 조건문이 큰 역할을 합니다.
FAQ
Q1: `elif`는 꼭 사용해야 하나요?
A1: 필수는 아닙니다. `if`와 `else`만으로도 조건을 처리할 수 있지만, 여러 개의 독립적인 조건을 순차적으로 검사해야 할 때는 `elif`가 훨씬 효율적이고 코드를 깔끔하게 만듭니다.
Q2: `if` 문 안에 `if` 문을 또 쓸 수 있나요?
A2: 네, 가능합니다. 이를 ‘중첩 조건문’이라고 합니다. 특정 조건이 참일 때 그 안에서 또 다른 조건을 검사해야 할 때 유용하게 사용됩니다. 더 자세한 내용은 중첩 조건문과 반복문의 실제 예제 챕터에서 다룹니다.
Q3: 조건이 너무 많으면 어떻게 해야 하나요?
A3: `elif`가 너무 많아지면 코드가 길고 복잡해질 수 있습니다. 이럴 때는 딕셔너리나 리스트를 활용하거나, 함수로 분리하는 등의 방식으로 코드를 더 효율적으로 구조화할 수 있습니다. 경우에 따라서는 다형성(Polymorphism) 같은 객체 지향 기법을 고려할 수도 있습니다.
Q4: 조건문에 `True`, `False` 대신 다른 값을 넣으면 어떻게 되나요?
A4: 파이썬에서 0, 빈 문자열(`”`), 빈 리스트(`[]`), 빈 딕셔너리(`{}`) 등은 `False`로 간주됩니다. 그 외의 대부분의 값(0이 아닌 숫자, 내용이 있는 문자열/리스트 등)은 `True`로 간주됩니다. 이를 ‘진리값 판단(Truthiness)’이라고 합니다.
Q5: 조건문에서 여러 조건을 한 번에 검사할 수 있나요?
A5: 네, `and`와 `or` 같은 논리 연산자를 사용하여 여러 조건을 한 줄에 작성할 수 있습니다. 예를 들어 `if score >= 80 and score < 90:`과 같이 사용할 수 있습니다.
참고 자료
- [1] Python 공식 튜토리얼 — 제어 흐름 도구와 함수 정의 — https://docs.python.org/ko/3/tutorial/controlflow.html
