Python(파이썬)_점프 투 파이썬/파이썬 날아오르기

이터레이터와 제너레이터

study note 2025. 9. 16. 01:16
반응형

❰이터레이터와 제너레이터❱

-이터레이터와 제너레이터에 대해 배워봅시다!

 

▶ 반복 가능한 객체 (Iterable)란?

먼저, 이터레이터와 제너레이터를 배우기 위해 반복 가능한 객체(Iterable)에 대해 알아보겠습니다.

for 반복문에서 사용하는 리스트, 튜플, 문자열 같은 것들을 반복 가능한 객체(Iterable)라고 부릅니다. 이들은 "내가 여러 개의 항목을 가지고 있으니, 하나씩 꺼내서 쓸 수 있어"라고 말하는 객체들을 의미 합니다.

my_list = [1, 2, 3] # 반복 가능한 객체 (Iterable)
for item in my_list:
    print(item)

 

▶ 이터레이터 (Iterator)란?

이터레이터반복 가능한 객체(리스트, 튜플, 문자열 등)에서 값을 하나씩 꺼낼 수 있는 객체를 의미하며 __iter__()와 __next__() 메서드를 구현한 객체입니다.

즉, 반복 가능한 객체는 그 자체로 순서대로 꺼내는 기능은 없습니다. 이 역할을 해주는 특별한 도구가 바로 이터레이터라는 것 입니다. 

for문 같은 경우는 내부적으로 자동으로 이터레이터를 사용해 동작합니다. 근데도 for문을 안쓰고 이터레이터를 사용 하는 이유는 

더 세밀한 제어가 필요할 때 (반복 중간에 멈춤, 수동으로 값 꺼내기, 무한 시퀀스 등)가 있기때문에 사용합니다.

__iter__()는 이터레이터 객체 자체를 반환합니다.
__next__()는 순회 가능한 다음 값을 반환하고, 더 이상 값이 없으면 StopIteration 예외를 발생시킵니다.

아래 간단한 예시를 보면서 이터레이터를 눈에 익히겠습니다.

iter()는 파이썬의 내장 함수이며 iter()를 통해 이터레이터를 호출 합니다.

이렇게 수동으로 값을 꺼낼수 있으며, 또한 값이 없으면  StopIteration예외를 발생시킵니다.

 

아래는 메서드를 직접 구현한 예시입니다.
실제로는 표준 함수인 iter()를 사용하는 것이 권장되는 방식이지만,
제너레이터를 이해하기 위한 학습 단계로 이런 구현을 함께 살펴보겠습니다.

이터레이터는 메모리에 전체 데이터를 한꺼번에 로드하지 않고, 필요할 때마다 값을 하나씩 생성하므로 대용량 데이터를 다룰 때 효율적입니다. for 루프는 내부적으로 이터레이터를 사용합니다.

 

▶ 제너레이터 (Generator)란?

이터레이터를 직접 만들려면 __next__() 메서드와 StopIteration 예외 처리를 구현해야 해서 코드가 복잡해집니다. 제너레이터는 이런 과정을 단순화해, 이터레이터를 쉽게 만들어주는 함수 기반 도구입니다.

제너레이터는 함수 안에서 yield 키워드를 사용해 값을 하나씩 반환합니다.

yield는 return처럼 값을 돌려주지만, 함수를 종료하지 않고 실행을 잠시 멈췄다가 다음 next() 호출 시 멈춘 지점부터 이어서 실행합니다.

제너레이터 함수를 호출하면 곧장 실행되는 것이 아니라, 제너레이터 객체를 반환합니다. 그 뒤 next()가 호출될 때마다 yield 문까지 실행되고 값을 하나 반환하며, 함수의 상태가 그대로 보존됩니다.

제너레이터는 메모리를 적게 쓰면서 큰 데이터를 처리 가능하다는 장점이 있습니다. (지연 평가(lazy evaluation))

 

제너레이터의 간단한 예제 입니다

 

이 예제의 핵심은 yield는 return과 달리 여러 번 값을 차례대로 돌려줄 수 있으며 함수의 실행 상태(지역 변수, 코드 위치 등)가 보존되어서, 중간부터 이어서 실행 가능하며, 반복문(for)에서 쓰면 next()를 직접 호출하지 않아도 자동으로 순회 가능하다는게 핵심입니다.

 

 

최종 요약 정리입니다.

for문은가장 편리한 반복 방법 (이터레이터 자동 생성/관리)

이터레이터 직접 사용은 반복 과정을 세밀하게 제어하고 싶을 때.

제너레이터는 메모리 효율, 무한 데이터, 복잡한 이터레이터를 간단히 구현하고 싶을 때

간단하게 for는 편리한 기본 도구, 하지만 이터레이터/제너레이터는 유연성과 확장성을 주기 위한 고급 도구입니다로 기억하시면 되겠습니다.

 

이것으로 이터레이터와 제너레이터에 대한 설명을 마치겠습니다.

고생하셨습니다!😌

 

📘 참고:
《Do it! 점프 투 파이썬 (전면 개정 2판)》, 박응용 저, 이지스퍼블리싱, 2023
※ 본 글은 위 교재의 내용을 학습 및 정리 목적으로 요약/재구성한 글입니다

 

 

반응형