프로그래밍을 배우는 가장 큰 이유 중 하나는 사람이 하기에 귀찮고 반복적인 업무를 컴퓨터에게 대신 시키기 위해서입니다. 엑셀 파일 수백 개를 하나씩 열어 데이터를 정리하거나, 특정 웹페이지를 매분마다 확인하는 작업 등은 사람이 하면 지치고 오차가 생기지만 컴퓨터는 몇 초 만에 정확히 끝낼 수 있습니다. 이처럼 동일한 작업을 반복 수행하게 만드는 명령어가 바로 반복문(Loop)입니다.
파이썬에서는 크게 for문과 while문 두 가지를 사용합니다. 하지만 초보자가 반복문을 처음 접할 때 가장 흔하게 겪는 공포가 하나 있습니다. 바로 코드가 끝나지 않고 컴퓨터 화면이 먹통이 되는 무한 루프(Infinite Loop) 현상입니다. 저 역시 입문 시절 조건식을 잘못 써서 컴퓨터 팬 소리가 요란하게 돌고 터미널 창이 멈춰버려 당황했던 경험이 있습니다. 오늘은 for와 while의 차이점을 알아보고, 무한 루프에서 빠져나오는 실전 테크닉을 정리해 드립니다.
1. 횟수가 정해져 있을 때는 for문, 조건이 핵심일 때는 while문
반복문은 크게 두 가지 상황으로 나뉩니다. "몇 번 반복할지 이미 알고 있는가?" 아니면 "특정 조건이 만족될 때까지 계속 반복할 것인가?"입니다.
1) for문: 횟수나 범위가 명확할 때
for문은 리스트나 범위(range) 같은 데이터 집합의 첫 번째 요소부터 마지막 요소까지 순서대로 꺼내며 반복합니다.
for i in range(5):
print(f"{i + 1}번째 반복 중입니다.")
range(5)는 0부터 4까지 5개의 숫자를 만들어내므로, 위 코드는 정확히 5번 실행되고 자동으로 종료됩니다. 횟수가 정해져 있기 때문에 무한 루프에 빠질 위험이 거의 없습니다.
2) while문: 특정 조건이 참(True)인 동안 계속할 때
while문은 조건식이 참(True)인 동안 무한히 코드를 반복합니다.
count = 0
while count < 3:
print(f"현재 카운트: {count}")
count += 1
이 코드는 count가 3보다 작은 동안 실행됩니다. 내부에서 count += 1을 통해 숫자를 1씩 올려주기 때문에, 3이 되는 순간 조건이 거짓(False)이 되어 반복문이 자연스럽게 종료됩니다.
2. 초보자가 무한 루프에 빠지는 대표적인 이유
while문을 사용할 때 가장 흔하게 저지르는 실수는 "조건을 거짓(False)으로 탈출하게 만드는 장치"를 빠뜨리는 것입니다.
# [위험] 무한 루프에 빠지는 코드 예시
count = 0
while count < 3:
print("종료되지 않는 메시지")
# count += 1 <-- 이 변수 증가 코드를 누락함!
count의 값이 영원히 0에 머물러 있기 때문에 count < 3이라는 조건은 항상 참(True)이 됩니다. 결국 컴퓨터는 멈추지 않고 화면에 문장을 영원히 출력하게 됩니다.
만약 코드를 실행했는데 터미널 창에 글자가 멈추지 않고 계속 올라간다면, 즉시 Ctrl + C (맥은 Control + C)를 눌러 강제 종료(Interrupt)해야 합니다.
3. 무한 루프를 안전하게 제어하는 3가지 실전 테크닉
실무에서는 일부러 while True:를 사용하여 의도적으로 무한 루프를 만든 뒤, 특정 조건에서 탈출시키는 방식을 정말 많이 사용합니다. 이때 안전장치가 되어주는 3가지 핵심 키워드가 있습니다.
1) break: 반복문 즉시 탈출하기
break를 만나면 그 즉시 가장 가까운 반복문을 완전히 빠져나옵니다. 지난 시간에 다룬 '숫자 맞추기 게임'에서 정답을 맞혔을 때 게임을 종료시키는 용도로 사용됩니다.
while True:
answer = input("종료하시겠습니까? (y/n): ")
if answer == 'y':
print("프로그램을 종료합니다.")
break # 반복문 즉시 종료
2) continue: 다음 순서로 건너뛰기
continue를 만나면 아래에 있는 나머지 코드를 실행하지 않고, 즉시 다음 반복 순서로 건너뜁니다. 짝수만 출력하고 홀수는 건너뛰고 싶을 때 자주 사용됩니다.
for i in range(1, 6):
if i % 2 == 0:
continue # 짝수일 때는 아래 print를 건너뜀
print(i) # 1, 3, 5만 출력됨
3) 최대 반복 횟수(Safety Net) 설정하기
네트워크 연결이나 외부 데이터 수집처럼 예외 상황이 발생할 수 있는 while문에는 최대 시도 횟수 제한을 두는 것이 안전합니다.
try_count = 0
max_tries = 10
while True:
try_count += 1
# 특정 작업 수행...
if try_count >= max_tries:
print("최대 시도 횟수를 초과하여 안전하게 종료합니다.")
break
이렇게 안전장치(Safety Net)를 마련해두면 원인을 알 수 없는 오류로 인해 프로그램이 영원히 멈춰버리는 현상을 완벽하게 방지할 수 있습니다.
핵심요약
반복 횟수가 정해져 있을 때는
for문, 조건에 따라 반복해야 할 때는while문을 사용하는 것이 효율적입니다.while문 사용 시 탈출 조건이나 변수 증감 연산을 누락하면 무한 루프에 빠지며, 이때는Ctrl + C로 강제 종료할 수 있습니다.의도적인 무한 루프를 사용할 때는
break로 탈출 시점을 명확히 지정하고, 최대 반복 횟수 같은 안전장치를 설정하는 습관이 중요합니다.


0 댓글