Menu

파이썬 while 반복문: 문법, while True, 무한 루프 피하기

언제 for가 아닌 while을 골라야 하는지, 무한 루프를 피하는 법, 그리고 실제 코드에서 가장 자주 등장하는 패턴들.

조건을 지켜보는 반복문

for가 이미 알려진 시퀀스를 순회한다면, while조건이 참인 동안 계속 반복해요. 반복이 몇 번 필요할지 미리 알 수 없을 때 꺼내 드는 도구예요 — 뭔가 될 때까지 재시도하거나, 사용자가 그만하겠다고 할 때까지 입력을 받거나, 서비스가 응답할 때까지 폴링할 때요.

모양은 간단해요:

main.py
Output
Click Run to see the output here.

0부터 4까지 출력합니다. 파이썬은 각 반복의 맨 위에서 조건을 검사해요. 참이면 본문을 실행하고, 다시 검사하고, 거짓이 되면 반복문이 끝납니다.

count += 1이 중요해요. 이게 없으면 조건이 영원히 참이 됩니다 — 무한 루프 예요. 이게 while의 주된 함정이고, 가능하면 for를 쓰는 게 좋은 주된 이유이기도 해요.

while이 맞는 도구인 경우

대표적인 쓰임새 몇 가지:

성공할 때까지 재시도.

main.py
Output
Click Run to see the output here.

사용자가 종료할 때까지 입력 받기.

main.py
Output
Click Run to see the output here.

큐 처리.

main.py
Output
Click Run to see the output here.

공통점은, 아이템을 순회하는 게 아니라 상태 변화를 지켜보고 있다는 거예요.

while True는 괜찮아요

이런 패턴을 자주 보시게 될 거예요:

main.py
Output
Click Run to see the output here.

"진짜" 종료 조건이 반복문 본문 안에 있고, 위에서 깔끔하게 검사할 수 있는 게 아닐 때 쓰는 관용적인 파이썬 표현이에요. 한 곳에서 갱신하고 다른 곳에서 검사해야 하는 should_continue 플래그를 만드는 것보다 읽기 쉬워요.

규칙은 단 하나: 코드가 언젠가 도달할 수 있는 break(또는 return, 또는 던져지는 예외)가 반드시 있어야 해요. 빠져나갈 방법이 없는 무조건 while True:는 프로그램을 잠가버리는 고전적인 방법이에요.

무한 루프 피하기

무한 루프는 조건이 영원히 참으로 남아 있을 때 생겨요. 단골 용의자들:

  • 변수 업데이트를 잊음. while count < 5:에는 본문 안에서 count를 바꾸는 뭔가가 있어야 해요.
  • 엉뚱한 변수 업데이트. while i < 10:인데 본문에서 j += 1을 하고 있는 경우 — 변수가 몇 개 이상 있으면 놓치기 쉬워요.
  • 부동소수점 비교. while x != 1.0:x가 1.0에 가까워지기만 하고 정확히 1.0이 되지 못하면 영원히 돕니다. 대신 <=abs(x - 1.0) < tolerance를 쓰세요.

터미널에서 무한 루프에 걸렸다면 Ctrl+C를 누르세요. 인터럽트 신호가 전달돼서 파이썬이 하던 일을 멈춥니다.

break, continue, 그리고 else

whilefor와 같은 세 가지 "흐름" 도구를 지원해요:

  • break는 반복문을 즉시 빠져나와요.
  • continue는 다음 반복으로 건너뜁니다(그래서 조건을 다시 검사해요).
  • else는 반복문이 break 없이 끝났을 때 실행됩니다.
main.py
Output
Click Run to see the output here.

원시적인 소수 판정이에요. 내부 break가 실행되면 합성수고, 반복문이 자연스럽게 끝나면(조건이 거짓이 되면) else가 실행돼서 소수라고 선언합니다.

while vs for: 어느 쪽을 고를까?

빠른 머릿속 체크:

  • 훑어갈 컬렉션이 있어요?for.
  • 정해진 횟수만큼 반복해야 해요?for i in range(n):.
  • 어떤 조건이 바뀔 때까지 돌려야 해요?while.

초기 파이썬 코드에서는 반복문의 90%가 for예요. while은 폴링, 재시도, 단순 REPL 같은 걸 할 때 등장해요. 인덱스로 리스트를 순회하려고 while을 쓰고 있다면, for + enumerate로 바꿀 때라는 신호예요.

실제적인 while 프로그램

숫자 맞히기 게임이 고전적인 예제예요. 반복 횟수가 사용자가 어떻게 하느냐에 달려 있으니까요:

main.py
Output
Click Run to see the output here.

몇 번 만에 맞힐지는 미리 알 수 없어요 — 사용자의 선택에 달려 있거든요. while이 존재하는 이유가 바로 그거예요.

다음 이야기

이제 파이썬의 두 가지 반복문을 다 봤어요. 다음은 range()의 세부 사항입니다 — 거의 모든 카운터 스타일 for 반복문에서 등장하는데, 컬렉션으로 넘어가기 전에 작은 뉘앙스들을 이해해 두면 좋아요.

자주 묻는 질문

for 대신 while을 언제 써야 하나요?

몇 번 반복해야 할지 미리 알 수 없을 때 while을 쓰세요 — 예를 들어 뭔가 성공할 때까지 재시도하거나, 사용자가 'quit'을 칠 때까지 입력을 받는 경우요. 이미 정해진 컬렉션을 단계별로 훑어나갈 때는 for를 쓰고요.

파이썬에서 무한 루프는 어떻게 피하나요?

반복문 안에서 결국 조건을 거짓으로 만드는 뭔가가 있도록 확인하세요. 무한 루프의 가장 흔한 원인은 조건이 의존하는 변수를 업데이트하는 걸 잊는 거예요. 걸렸다면 터미널에서 Ctrl+C로 멈추세요.

while True는 나쁜 관행인가요?

그 자체로 나쁜 건 아니에요. 안에 분명한 break를 둔 while True:는 "어떤 특정 종료 조건에 도달할 때까지 반복" 패턴으로 완전히 평범합니다. 두 곳에서 관리해야 하는 불리언 플래그를 만드는 것보다 깔끔해요.

Coddy로 코딩 배우기

시작하기