이전 시간에는 지정된 횟수만큼 반복하는 for문에 대해 알아보았습니다.

하지만 실제 프로그램을 짜다 보면 단순히 반복만 하는 것이 아니라, "특정 상황에 도달하면 반복을 완전히 멈춰라!" 혹은 "이번 순서는 건너뛰고 다음으로 넘어가라!" 같은 세밀한 조작이 필요해집니다.
오늘은 반복문의 흐름을 내 마음대로 쥐락펴락할 수 있는 제어문(break, continue, else)과, 무한 반복이 필요할 때 사용하는 while문에 대해 자세히 정리해 보겠습니다.
1. 반복문을 완전히 탈출하는 break
break는 이름 그대로 자신을 감싸고 있는 가장 가까운 반복문 하나를 부수고(탈출) 밖으로 나가는 역할을 합니다.
통상적으로 if 조건문과 결합하여 "어떤 조건을 만족했을 때 그만해!"라는 용도로 많이 쓰입니다.
# 1. 1회만 실행하고 탈출하기
for n in range(10):
print(n)
break # 첫 번째 반복(n=0)에서 바로 탈출합니다.
# 출력: 0
# 2. 특정 조건을 만족할 때 탈출하기
for n in range(10): # n은 0부터 9까지 증가 예정
print(n)
if n > 3: # n이 4가 되는 순간 참이 되어 진입
break # 반복문 탈출!
# 출력: 0, 1, 2, 3, 4 (4까지 출력된 후 멈춤)
💡 [주의] 이중(중첩) 반복문에서의 break
break는 자신을 감싸고 있는 가장 가까운(첫 번째로 만나는) 반복문 1개만 탈출합니다.
# [케이스 1] 안쪽 반복문에만 break가 있는 경우
for i in range(3, 7): # 바깥 루프 (3~6)
for j in range(1, 10): # 안쪽 루프 (1~9)
print(f'{i} x {j} = {i*j:>2}')
break # 안쪽 for문(j)만 탈출합니다.
# 출력:
# 3 x 1 = 3
# 4 x 1 = 4
# 5 x 1 = 5
# 6 x 1 = 6
# -> 바깥 루프가 4번 도니까 총 4회 출력됩니다.
# [케이스 2] 바깥쪽 반복문에도 break가 있는 경우
for i in range(3, 7):
for j in range(1, 10):
print(f'{i} x {j} = {i*j:>2}')
break # 안쪽 루프 탈출
break # 바깥쪽 루프까지 탈출
# 출력:
# 3 x 1 = 3
# -> 최종적으로 단 1회만 출력되고 모든 반복문이 종료됩니다.
2. 이번 턴만 건너뛰는 continue
break가 반복문 자체를 파괴한다면,
continue는 "이번 회차의 남은 코드는 무시하고, 바로 다음 반복 조건으로 점프(스킵)해!"라는 뜻입니다.
for i in range(3, 7):
if i == 4:
continue # i가 4일 때는 아래 print(i)를 무시하고 5로 넘어갑니다.
print(i)
# 출력: 3, 5, 6 (4가 누락됨)
추가 지식: continue는 데이터 필터링을 할 때 매우 유용합니다. 에러가 발생할 것 같은 이상한 데이터가 들어오면 continue로 건너뛰고 나머지 정상 데이터만 계속 처리하도록 구성할 수 있습니다.
3. 파이썬만의 독특한 문법: 반복문 else
다른 언어(C, Java)에는 없는 파이썬만의 아주 특별한 문법입니다. 보통 else는 if문 뒤에 붙지만,
파이썬에서는 for나 while 뒤에도 붙을 수 있습니다.
- 진입 조건: 반복문이 도중에 break를 만나지 않고 끝까지 무사히 정상 종료되었을 때만 else 블록이 실행됩니다.
- 용도: 데이터를 검색할 때 "끝까지 찾아봤는데 없더라"를 처리할 때 아주 유용합니다.
# [케이스 1: 정상 종료 - else 실행 O]
for i in range(3):
if i == 1:
continue # continue는 반복문을 중단하는 것이 아니므로 정상 종료로 봅니다.
print('A', i)
else:
print('반복문이 중단 없이 정상 수행되었다')
# 출력: A 0 -> A 2 -> 반복문이 중단 없이 정상 수행되었다
# [케이스 2: 강제 종료 - else 실행 X]
for i in range(3):
if i == 1:
break # break로 인해 반복문이 중간에 파괴됨!
print('A', i)
else:
print('반복문이 중단 없이 정상 수행되었다') # 이 코드는 실행되지 않습니다.
# 출력: A 0
4. 조건이 참인 동안 무한 반복! while문
for문이 횟수가 정해져 있을 때 쓰인다면, while문은 "언제 끝날지 모르겠지만, 이 조건을 만족하는 동안(~할 때까지) 계속 반복해!"라는 상황에서 씁니다. (예: 게임 루프, 24시간 도는 서버 대기 상태 등)
가장 조심해야 할 점은 조건이 영원히 참이 되는 무한 루프(Infinite Loop)에 빠지지 않도록 반드시 탈출 코드(break 등)를 마련해야 한다는 것입니다.
# 무한 루프와 리스트의 활용
datas = [11, 12, 13]
# 데이터에 변화를 주어 언젠가 반복문이 끝나도록 유도합니다.
while datas: # 리스트에 데이터가 있으면 True, 비면 False가 됩니다.
# pop(): 리스트의 맨 마지막 요소를 뽑아서 제거합니다.
item = datas.pop()
print(item, "남은 개수:", len(datas))
# 출력:
# 13 남은 개수: 2
# 12 남은 개수: 1
# 11 남은 개수: 0
# (datas가 빈 리스트가 되면서 while문이 자연스럽게 종료됩니다.)
5. 종합 실습: 코드 흐름 읽어보기
지금까지 배운 내용을 총동원하여 아래 코드의 흐름과 출력 결과를 예측해 볼까요?
a = [1, 2, 3, 4, 5]
while a:
tmp = a.pop() # 맨 뒤에서부터 하나씩 꺼냅니다. (5 -> 4 -> 3 -> 2 -> 1 순서)
if tmp % 2 == 0:
continue # 짝수(4, 2)일 때는 아래 코드를 무시하고 다음 턴으로 점프합니다.
print(tmp, "남은 리스트:", a)
if len(a) == 1:
break # 리스트에 1개만 남았을 때 강제 종료 (하지만 진입할 일이 있을까요?)
else:
# break를 만난 적이 없다면 실행됩니다.
print('반복문에서 정상적으로 모두 처리됨')
🔍 정답 및 해석
위 코드는 다음과 같이 동작합니다.
- tmp = 5 (홀수) ➔ 출력: 5 남은 리스트: [1, 2, 3, 4] ➔ 남은 길이 4이므로 통과
- tmp = 4 (짝수) ➔ continue로 점프
- tmp = 3 (홀수) ➔ 출력: 3 남은 리스트: [1, 2] ➔ 남은 길이 2이므로 통과
- tmp = 2 (짝수) ➔ continue로 점프
- tmp = 1 (홀수) ➔ 출력: 1 남은 리스트: [] ➔ 남은 길이 0이므로 통과
- while 조건식이 거짓(빈 리스트)이 되어 자연스럽게 종료!
- break를 만난 적이 없으므로 else 구문 진입!
[최종 출력 결과]
5 남은 리스트: [1, 2, 3, 4]
3 남은 리스트: [1, 2]
1 남은 리스트: []
반복문에서 정상적으로 모두 처리됨
오늘의 한 마디
인생에서 귀인을 만나는 횟수가 별로 없다고 합니다. 다행히 저는 조금 어린 나이에 그러한 분을 만나서 다행이라고 생각합니다. 하지만 그 분을 만나기 위해서 저도 노력을 했습니다.
결론은 그것입니다. 물론 우리가 운이 좋아서 어떤 목표에 도달할 수 있겠지만 그 목표를 향해 조금의 노력도 하지 않는다면 그 목표에 갈 확률이 현저히 떨어지는 것 같습니다.
꾸준히 노력하여 우리가 원하는 곳으로 전지해 봅시다. 스스메!
'코딩 개발 > Python' 카테고리의 다른 글
| Python - 절차적 프로그래밍2 (숫자 맞추기 게임 만들기 step4 ~ step7) (0) | 2026.07.16 |
|---|---|
| Python - 절차적 프로그래밍1 (숫자 맞추기 만들기 step1 ~ step3) (0) | 2026.07.15 |
| Python - 반복문 (for) (0) | 2026.07.13 |
| Python - 흐름제어, 조건식 (0) | 2026.07.12 |
| Python - 튜플 Tuple (생성, 인덱싱, 슬라이싱, 분해) (0) | 2026.07.11 |