Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 반복자(Iterator) 완벽 이해: __iter__()와 __next__() 메서드 활용법

파이썬에서는 리스트, 튜플, 딕셔너리 같은 컨테이너 객체를 순회(iteration)하는 개념이 매우 중요합니다. 반복자(Iterator)는 두 가지 핵심 메서드로 구성되어 있으며, 이를 활용하면 사용자가 직접 정의한 클래스에서도 반복 기능을 지원할 수 있습니다. 바로 __iter__()__next__()입니다.

__iter__() 메서드란?

__iter__() 메서드는 반복자(iterator) 객체 자신을 반환하는 역할을 합니다. 하나의 클래스가 서로 다른 방식의 순회를 지원해야 하는 경우, 추가적인 메서드를 함께 정의하여 다양한 작업을 수행하도록 설계할 수도 있습니다.

__next__() 메서드란?

__next__() 메서드는 컨테이너에서 다음 요소를 하나씩 꺼내어 반환합니다. 모든 요소를 소진하고 더 이상 반환할 값이 없으면, StopIteration 예외를 발생시켜 순회가 끝났음을 알립니다.

예제 코드

아래 예제는 1부터 max 값까지 각 숫자 x에 대해 x의 x제곱(x^x)을 계산하여 반환하는 사용자 정의 반복자 클래스입니다.

class PowerIter:
   # 1부터 max 범위 내의 x에 대해 x ^ x 값을 반환
   def __init__(self, max = 0):
      self.max = max # 반복자의 최대 한계 설정
        
   def __iter__(self):
      self.term = 0
      return self
    
   def __next__(self):
      if self.term <= self.max:
         element = self.term ** self.term
         self.term += 1
         return element
      else:
         raise StopIteration # 최대값을 초과하면 예외 발생
powIterObj = PowerIter(10)
powIter = iter(powIterObj)
for i in range(10):
   print(next(powIter))

실행 결과

1
1
4
27
256
3125
46656
823543
16777216
387420489

코드 실행 흐름을 살펴보면, 먼저 PowerIter(10)으로 객체를 생성하고 iter() 함수를 통해 반복자를 얻습니다. 이후 next() 함수가 호출될 때마다 __next__() 메서드가 실행되어 현재 항목의 거듭제곱 값을 계산해 반환하며, 항목이 최대값을 넘으면 StopIteration 예외로 순회를 종료합니다.