제어 구조 (조건문, 반복문, match-case, 제어 제어문) 총정리
앞서 파이썬의 기본 입출력과 연산자, 이스케이프 시퀀스까지 완벽하게 정복했습니다. 이번 글에서는 프로그램의 실행 흐름을 자유자재로 조율하는 핵심 문법인 파이썬 제어 구조(Control Structures)의 모든 것을 파헤쳐 보겠습니다. 조건에 따라 갈림길을 만들고, 반복 작업을 효율적으로 처리하는 방법을 익혀보세요!
1. 제어 구조(Control Structures)란?
프로그램의 실행 흐름을 제어하는 문법적 요소입니다. 조건에 따라 특정 코드 블록을 실행하거나, 동일한 작업을 반복적으로 수행하도록 지시하여 프로그램이 복잡하고 지능적인 작업을 처리할 수 있도록 돕습니다. 파이썬의 제어 구조는 크게 조건문과 반복문으로 나뉩니다.
2. 조건문 (Conditional Statements)
특정 조건이 참(True)인지 거짓(False)인지 판단하여 실행할 코드를 분기하는 제어 구조입니다. 파이썬은 들여쓰기(Indentation)를 통해 코드 블록을 엄격하게 구분합니다.
2.1 if, if-else, if-elif-else 구문
-
참/거짓 판단 기준: 파이썬에서는 숫자 0, 빈 문자열
"", 빈 리스트[], 빈 튜플()및None은 거짓(False)으로 취급되며, 이외의 값은 참(True)으로 평가됩니다.
score = 85
if score >= 90:
print("A 학점")
elif score >= 80:
print("B 학점") # 이 조건이 참이므로 실행됨
elif score >= 70:
print("C 학점")
else:
print("F 학점")
2.2 중첩 if 문과 in, not in 연산자 활용
in, not in 연산자를 조건문과 결합하면 문자열, 리스트, 튜플 등의 시퀀스 데이터 포함 여부를 아주 직관적으로 검사할 수 있습니다.
# 1. 중첩 if 문 및 논리 연산자
x, y = 10, 5
if x > 5 and y < 10:
print("x는 5보다 크고 y는 10보다 작습니다.")
# 2. 리스트 멤버십 검사
colors = ['red', 'blue', 'green']
if 'red' in colors:
print("'red'는 리스트에 포함되어 있습니다.")
2.3 파이썬 3.10 신기능: 구조적 패턴 매칭 (match-case)
파이썬 3.10 버전부터 도입된 match-case는 타 언어의 switch 문보다 훨씬 강력한 구조적 패턴 매칭(Structural Pattern Matching)을 지원합니다. (자동으로 블록을 탈출하므로 break가 필요 없습니다.)
def analyze_point(point):
match point:
case (0, 0):
print("원점입니다.")
case (x, 0):
print(f"X축 위의 점: x={x}")
case (x, y) if x > 0 and y > 0:
print(f"제1사분면 점: ({x}, {y})") # 가드(Guard) 조건 활용
case _:
print("기타 위치")
analyze_point((3, 5)) # 출력: 제1사분면 점: (3, 5)
3. 반복문 (Loop Statements)
동일한 코드를 여러 번 실행해야 할 때 사용하는 구조입니다.
3.1 for 반복문과 range() 함수
리스트, 튜플, 문자열 같은 컬렉션의 요소를 순회하거나 특정 횟수만큼 반복할 때 사용합니다. 정수를 생성하는 range(start, stop, step) 함수와 찰떡궁합입니다.
# 리스트 순회
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# 0부터 4까지 반복
for i in range(5):
print(f"{i}번째 반복")
3.2 리스트 컴프리헨션과 딕셔너리 순회
-
리스트 컴프리헨션:
for문을 사용하여 한 줄로 간결하게 새로운 리스트를 생성합니다.squares = [x**2 for x in range(10)] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] -
딕셔너리 순회:
.items()메서드를 활용해 키와 값을 동시에 꺼내어 반복할 수 있습니다.my_dict = {'a': 1, 'b': 2, 'c': 3} for key, value in my_dict.items(): print(f"key: {key}, value: {value}")
3.3 while 반복문과 무한 루프
특정 조건이 참(True)인 동안 코드 블록을 계속 반복합니다. 조건이 거짓이 되지 않으면 무한 루프(Infinite Loop)에 빠지므로 주의해야 합니다.
# 사용자 입력으로 무한 루프 제어
while True:
user_input = input("Enter 'exit' to stop: ")
if user_input == "exit":
print("프로그램을 종료합니다.")
break
print(f"입력한 값: {user_input}")
4. 반복 제어문 (break, continue, pass)
반복문의 흐름을 세밀하게 제어하거나 문법적 빈자리를 채워주는 키워드입니다.
-
break: 즉시 반복문을 탈출(종료)합니다. -
continue: 현재 반복을 즉시 중단하고 다음 반복 순번으로 넘어갑니다. -
pass: 아무 작업도 하지 않는 문법적 자리채움용입니다. 코드를 나중에 작성할 예정이거나 빈 블록을 유지해야 할 때 에러를 방지하기 위해 사용합니다.
# continue 예시: 2일 때 건너뛰기
for i in range(5):
if i == 2:
print("2는 건너뜁니다.")
continue
print(i)
# 출력: 0, 1, 2는 건너뜁니다., 3, 4
# pass 예시 (함수 뼈대만 미리 만들 때)
fn my_future_function():
pass