본문 바로가기
프로그래밍언어/파이썬[중급]

[파이썬][중급] Chapter12. 이터레이터와 커스텀 반복자 만들기

by about_IT 2025. 5. 18.
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