파이썬은 '반복 가능(iterable)'하지 않은 객체를 순회할 수 없습니다. for 루프는 내부적으로 반복 가능한 데이터 타입에 내장된 특수 메서드들을 호출하면서, 그 객체로부터 요소를 하나씩 추출하는 방식으로 동작하기 때문입니다.
for 루프의 내부 동작 원리
파이썬에서 for 루프가 실행되면 다음과 같은 과정이 일어납니다.
- 먼저
iter()함수를 호출해 객체의__iter__()메서드를 통해 이터레이터(iterator)를 얻습니다. - 그다음
next()함수를 반복적으로 호출하며 요소를 하나씩 꺼냅니다. - 더 이상 꺼낼 요소가 없어
StopIteration예외가 발생하면 루프를 종료합니다.
즉, for 루프는 리스트, 튜플, 문자열, 딕셔너리처럼 이러한 프로토콜을 구현한 객체에만 작동합니다.
단일 객체가 반복되지 않는 이유
정수(int)나 실수(float) 같은 단일 값 객체는 __iter__나 __next__ 메서드를 갖고 있지 않은 반복 불가능(non-iterable) 타입입니다. 따라서 이런 객체에서는 요소를 추출할 방법이 전혀 없으며, for 루프는 이를 하나짜리 시퀀스처럼 취급하지 않고 오히려 오류를 발생시킵니다.
x = 5
for i in x:
print(i)
# TypeError: 'int' object is not iterable
단일 객체를 한 번 반복하고 싶다면?
만약 단일 객체를 정확히 한 번 순회하고 싶다면, 리스트나 튜플로 감싸서 반복 가능한 형태로 만들어 주면 됩니다.
x = 5
for i in [x]:
print(i) # 5가 한 번 출력됨
결론적으로, 파이썬의 for 루프는 반복 가능 프로토콜(iterable protocol)을 따르는 객체에만 적용되도록 설계되어 있기 때문에, 단일 객체에 대해 자동으로 한 번의 반복을 수행하지 않는 것입니다.