프로그래밍에서 반복이란 무엇인가요?
프로그래밍에서 반복(이터레이션)은 조건이 충족되거나 컬렉션의 모든 항목을 처리할 때까지, 보통 반복문으로 명령 묶음을 되풀이하는 것입니다. 되풀이되는 명령을 한 번 지나가는 것도 이터레이션이라고 불러요.
업데이트: 2026년 9월 24일
사용자 10,000명에게 알림 이메일을 보내는 프로그램에 발송 코드가 10,000번 복사되어 있지는 않아요. 코드는 반복문 안에 한 번만 있고, 반복문이 사용자마다 한 번씩 그 코드를 실행해요. 한 번 실행하는 것이 이터레이션 하나이고, 반복문 전체가 프로그램이 사용자들을 차례로 도는 방식이에요.
반복은 단계별로 이렇게 동작해요
모든 반복문은 같은 순환을 따라요.
- 확인. 반복문의 조건을 검사해요. 조건은 불리언이에요. 다음 항목이 있는지, 카운터가 아직 한도보다 작은지를 묻죠.
- 실행. 답이 참이면 반복문 본문을 한 번 실행해요.
- 갱신. 다음 항목으로 넘어가거나 카운터를 바꿔요.
- 되풀이. 1단계로 돌아가요. 확인 결과가 거짓이면 프로그램은 반복문 다음 코드로 넘어가요.
여기서는 본문이 다섯 번 실행되고, 이터레이션마다 다음 숫자를 누적 합계에 더해요.
iteration 1 total is now 1
iteration 2 total is now 3
iteration 3 total is now 6
iteration 4 total is now 10
iteration 5 total is now 15
Done: 15
변수 total은 반복문 바깥에 있어서, 한 이터레이션에서 다음 이터레이션으로 값이 이어져요. 반복문 전에 정하고 안에서 갱신하는 이런 변수를 누산기(accumulator)라고 하며, 무언가를 계산하는 반복문에는 거의 항상 등장해요.
횟수를 세는 반복과 조건으로 도는 반복
반복에는 두 종류가 있어요. 확정 반복은 정해진 횟수만큼 돌아요. 리스트의 항목마다 한 번, 또는 1부터 5까지 숫자마다 한 번씩이요. 파이썬의 for 반복문이 이런 용도로 만들어졌고, range()와 함께 쓰는 경우가 많아요.
비확정 반복은 무언가가 일어날 때까지 되풀이하고, 몇 번 돌지 미리 알 수 없어요. 이 경우에는 while 반복문이 맞아요.
8 years, balance 214.36
매년 10%씩 불어나는 돈은 두 배가 되기까지 8년이 걸려요. 프로그램은 방정식을 풀어서가 아니라 반복해서 그 답을 찾았어요. 파이썬에서의 두 반복문은 for 반복문과 while 반복문 가이드에서 다뤄요.
컬렉션 순회하기
대부분의 반복문은 컬렉션을 훑어요. 배열의 요소, 문자열의 글자, 파일의 줄 같은 것들이죠. 파이썬의 for 반복문은 각 요소를 바로 건네주고, enumerate()는 위치를 덧붙여 줘요.
0 apple
1 banana
2 cherry
내부적으로 for는 iter()로 컬렉션에 이터레이터를 요청하고, 이터레이션마다 그 이터레이터에 next()를 한 번씩 호출해요. 같은 호출을 직접 해 볼 수도 있어요.
red
green
blue
no more items
기본값이 없으면 네 번째 next()는 StopIteration을 일으켜요. for 반복문은 이 예외를 신호로 삼아 컬렉션이 끝났다는 것을 알아요.
다른 언어는 같은 개념을 다르게 표기해요. C는 인덱스로 세고, 자바와 자바스크립트에는 각 요소를 건네주는 반복문도 있어요.
for (int i = 0; i < 3; i++) {
printf("%s\n", colors[i]);
}
for (String color : colors) {
System.out.println(color);
}
for (const color of colors) {
console.log(color);
}
반복과 재귀의 차이
재귀는 일을 되풀이하는 또 다른 방법이에요. 함수가 더 작은 버전의 문제로 자기 자신을 호출하고, 바로 답할 수 있는 경우에 닿을 때까지 계속해요. 한쪽으로 쓴 것은 다른 쪽으로도 쓸 수 있지만, 동작 방식은 달라요.
| 반복 | 재귀 | |
|---|---|---|
| 되풀이하는 방법 | 반복문이 시작점으로 돌아감 | 함수가 자기 자신을 호출함 |
| 멈추는 때 | 반복문 조건이 거짓이 될 때 | 기저 사례에 닿을 때 |
| 메모리 | 몇 번을 돌든 같은 양 | 아직 끝나지 않은 호출마다 스택 프레임 하나 |
| 전형적인 실패 | 무한 루프 | 스택 오버플로(파이썬에서는 RecursionError) |
| 잘 맞는 곳 | 리스트, 카운터, 조건이 될 때까지 되풀이 | 트리, 중첩된 데이터, 분할 정복 |
메모리 행은 실제로 중요해요. 파이썬은 기본적으로 중첩 호출을 1,000번 정도까지 허용하므로, 숫자 5,000개를 재귀로 더하면 실패하지만 반복문은 문제없어요.
5050 5050
12502500
sum_recursive(5000) failed: RecursionError
재귀 시각화에서 호출 스택이 단계별로 쌓이고 줄어드는 모습을 볼 수 있어요.
흔한 실수
무한 루프. 조건이 절대 거짓이 되지 않는 while 반복문은 프로그램을 멈출 때까지 돌아요. 흔한 원인은 count = count - 1을 빠뜨리는 것처럼 갱신 단계를 잊는 거예요.
하나 차이 오류. range(1, 5)는 끝 값을 빼기 때문에 5가 아니라 1, 2, 3, 4를 만들어요. 한 번 더 돌거나 한 번 덜 도는 반복문도 오류 없이 실행되면서 틀린 답을 내요. 이것이 논리 오류예요.
순회하는 도중에 리스트 바꾸기. 순회 중인 리스트에서 항목을 지우면 반복문이 요소를 건너뛰어요.
[1, 2, 3]
2 하나가 살아남았어요. 첫 번째 2를 지우자 두 번째 2가 반복문이 이미 지나간 위치로 밀려났기 때문이에요. 대신 새 리스트를 만드세요. numbers = [n for n in numbers if n != 2]처럼요.
다음으로 읽을 내용
반복문은 컬렉션을 훑으므로 배열이란 무엇인지가 짝을 이루는 페이지이고, 불리언이란 무엇인지는 반복문이 언제 멈출지 정하는 참/거짓 확인을 설명해요. 반복문이 오류 메시지 없이 틀린 결과를 낸다면 논리 오류란 무엇인지를 읽어 보세요. 반복문 작성을 연습하려면 파이썬 강의를 시작하거나 위 예제들을 파이썬 플레이그라운드에서 실행해 보세요.
자주 묻는 질문
반복의 예로는 어떤 것이 있나요?
for 반복문은 이름마다 한 번씩, 100번 반복해요. 올바른 비밀번호가 입력될 때까지 계속 묻는 while 반복문도 반복이에요. 몇 번 돌지 미리 알 수 없더라도요.재귀와 반복 중 어느 쪽이 더 좋은가요?
반복과 반복문은 같은 말인가요?
for나 while 같은 언어의 구문이고, 반복은 그 구문이 수행하는 되풀이예요. 반복문 본문을 한 번 지나가는 것도 이터레이션이라고 부르므로, 5번 도는 반복문은 이터레이션 5번을 수행해요.스프린트와 이터레이션은 무엇이 다른가요?
이터러블(iterable)은 무슨 뜻인가요?
range처럼 for로 순회할 수 있는 객체예요. 파이썬에서는 iter()가 이터레이터를 만들어 낼 수 있는 객체가 이터러블이에요. 정수는 이터러블이 아니라서 for x in 5:는 TypeError를 일으켜요.