728x90
파이썬은 반복 가능한 객체(iterable)와 반복자(iterator) 개념을 명확히 구분합니다. 반복자 프로토콜을 이해하면 우리가 직접 반복 가능한 객체를 만들 수 있으며, 다양한 순회 패턴을 유연하게 구현할 수 있습니다.
● 이터러블 vs 이터레이터
- 이터러블(iterable):
__iter__()
메서드를 구현한 객체. 리스트, 튜플, 딕셔너리 등 - 이터레이터(iterator):
__next__()
와__iter__()
를 모두 구현한 객체
이터러블은 반복이 가능한 객체를 의미하며, iter()
함수를 통해 이터레이터로 변환됩니다.
lst = [1, 2, 3]
it = iter(lst)
print(next(it)) # 1
● 커스텀 이터레이터 클래스 만들기
클래스에 __iter__()
와 __next__()
메서드를 정의하면 반복 가능한 객체를 직접 만들 수 있습니다.
class CountDown:
def __init__(self, start):
self.current = start
def __iter__(self):
return self
def __next__(self):
if self.current <= 0:
raise StopIteration
value = self.current
self.current -= 1
return value
for num in CountDown(3):
print(num)
이 클래스는 3부터 1까지 출력하고 반복을 종료합니다.
● 무한 이터레이터 만들기
이터레이터는 종료 조건 없이 무한 반복도 구현할 수 있습니다. 이 경우 StopIteration
을 생략하고, 주의해서 사용해야 합니다.
class InfiniteCounter:
def __init__(self):
self.num = 0
def __iter__(self):
return self
def __next__(self):
self.num += 1
return self.num
● 마무리
이터레이터를 직접 구현하면 단순한 반복문을 넘어서 상태 기반의 반복 로직을 만들 수 있습니다. 반복자 프로토콜은 파이썬의 내부 작동 원리를 이해하는 데 매우 중요한 기반이므로 꼭 숙지하시기 바랍니다.
728x90
'프로그래밍언어 > 파이썬[중급]' 카테고리의 다른 글
[파이썬][중급] Chapter14. collections 모듈 (deque, Counter 등) (0) | 2025.05.18 |
---|---|
[파이썬][중급] Chapter13. itertools 모듈 활용법 (0) | 2025.05.18 |
[파이썬][중급] Chapter11. 제너레이터 함수와 yield (0) | 2025.05.18 |
[파이썬][중급] Chapter10. 데코레이터 함수의 작성과 활용 (0) | 2025.05.18 |
[파이썬][중급] Chapter09. 일급 객체와 클로저 (0) | 2025.05.18 |