break와 continue: 루프 흐름 세밀하게 제어하기
Python break와 continue의 동작 차이, 중첩 루프 탈출 전략(플래그·함수·예외), continue vs 컴프리헨션 비교, 실전 패턴을 정리합니다.
지난 글에서 while 루프의 기본 흐름을 살펴봤다. 루프 안에서 반복을 중단하거나 특정 회차를 건너뛰어야 할 때 break와 continue를 사용한다. 두 키워드는 이름이 비슷하지만 동작이 완전히 다르다.
break — 루프 완전 탈출
break를 만나면 현재 루프 전체를 즉시 종료하고 루프 바깥 다음 코드로 이동한다.
for n in range(10):
if n == 5:
break
print(n)
# 0 1 2 3 4
n == 5가 되는 순간 for 루프가 종료된다. 5 이후 6, 7, 8, 9는 출력되지 않는다.
while 루프에서도 동일하다.
total = 0
i = 0
while True:
total += i
i += 1
if total > 100:
break
print(f"합계 {total}, 마지막 i={i}")
continue — 현재 회차만 건너뜀
continue를 만나면 현재 반복의 나머지 코드를 건너뛰고 다음 반복으로 즉시 이동한다. 루프 자체는 계속된다.
for n in range(6):
if n % 2 == 0:
continue # 짝수는 건너뜀
print(n)
# 1 3 5
n=0, 2, 4일 때는 continue로 print(n) 을 건너뛰고 다음 값으로 넘어간다.
중첩 루프에서 break
break는 가장 안쪽 루프만 탈출한다. 바깥 루프는 계속 실행된다.
for i in range(3):
for j in range(3):
if j == 1:
break # 안쪽 for만 탈출
print(i, j)
# 0 0
# 1 0
# 2 0
j == 1이 되면 안쪽 루프를 탈출하지만 바깥 for i 루프는 계속 돌아 i=1, 2 도 실행된다.
중첩 루프 전체 탈출 전략
방법 1: 플래그 변수
found = False
for row in matrix:
for cell in row:
if cell == target:
found = True
break
if found:
break
방법 2: 함수 + return (가장 권장)
def find_in_matrix(matrix, target):
for row in matrix:
for cell in row:
if cell == target:
return True
return False
함수로 감싸면 return으로 어느 깊이에서든 즉시 탈출할 수 있어 가장 깔끔하다.
continue vs 리스트 컴프리헨션
단순 필터링이라면 continue 대신 컴프리헨션이 더 Pythonic하다.
lines = ["# 주석", "코드1", "# 주석2", "코드2"]
# continue 방식
result = []
for line in lines:
if line.startswith("#"):
continue
result.append(line)
# 컴프리헨션 방식 (권장)
result = [l for l in lines if not l.startswith("#")]
단, 필터링 후 복잡한 처리가 있거나 부수 효과(파일 쓰기 등)가 필요하다면 continue 방식이 적합하다.
자주 하는 실수
# 실수: continue 뒤 코드가 절대 실행 안 됨
for n in range(5):
continue
print(n) # 절대 실행되지 않음
# 실수: 무한 루프 안에서 break 조건 누락
i = 0
while True:
i += 1
if i > 100:
pass # break를 pass로 실수 → 무한 루프
정리
break— 루프 전체 즉시 종료, 가장 안쪽 루프만 영향continue— 현재 회차만 건너뜀, 루프는 계속- 중첩 루프 전체 탈출엔 함수 +
return이 가장 깔끔 - 단순 필터는
continue보다 리스트 컴프리헨션이 Pythonic
지난 글: while 루프: 조건 기반 반복과 무한 루프 제어
다음 글: 루프의 else: break 없이 완주했을 때만 실행되는 블록
읽어주셔서 감사합니다. 😊