Python에서의 Iterator 개념과 사용법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- Python 초보자 및 중급 개발자
- 메모리 효율적인 데이터 처리를 학습하고자 하는 개발자
- 반복자와 제너레이터의 구분이 필요한 프로젝트 참여자
핵심 요약
- Iterator는 메모리 효율적인 대규모 데이터 처리를 위해
__iter__()
와__next__()
메서드를 사용하는 불변 객체입니다. iter()
함수나 제너레이터(yield
사용)로 생성되며,next()
또는for
루프로 요소를 순차적으로 접근합니다.StopIteration
예외가 발생할 수 있으며,next()
의default
매개변수로 예외 처리가 가능합니다.
섹션별 세부 요약
1. Iterator의 정의와 특징
- Iterator는 대규모 데이터를 메모리 절약하면서 처리할 수 있도록 설계된 객체입니다.
- 불변성으로 인해 인덱싱/슬라이싱이 불가능하며,
len()
사용 시list()
또는more_itertools.ilen()
과 함께 사용해야 합니다. __iter__()
와__next__()
메서드를 통해 요소를 하나씩 반환하며, 요소가 없을 경우StopIteration
예외를 발생시킵니다.
2. Iterator 생성 방법
iter()
함수는list
,tuple
,set
,range()
등과 같은 반복 가능한 객체로부터 iterator를 생성합니다.sentinel
매개변수를 사용하면callable
객체의 반환값이 sentinel과 동일할 때 예외를 발생시킵니다.__iter__()
메서드를 구현한 클래스나 제너레이터를 통해 iterator를 생성할 수 있습니다.
3. `next()`와 `__next__()` 사용법
next(iterator, default)
는 iterator가 종료되면default
값을 반환하며, 예외 발생 방지에 유용합니다.__next__()
메서드는next()
와 동일한 동작을 수행하지만, 매개변수가 없음을 특징으로 합니다.- 예제:
next(v, 'No value')
로 iterator가 종료된 경우 기본값을 반환하는 방식을 확인할 수 있습니다.
4. 코드 예제 및 실행 결과
iter(['a', 'b', 'c', 'd'])
로 생성된 iterator는next()
로 요소를 하나씩 접근하며,StopIteration
이 발생할 경우 예외를 발생시킵니다.__iter__()
와__next__()
를 직접 사용한 예제에서 동일한 동작을 확인할 수 있습니다.for
루프로 iterator를 순회할 경우,next()
와 동일한 방식으로 요소가 처리됩니다.
결론
- 메모리 효율적인 데이터 처리를 위해
iterator
를 사용하고,StopIteration
예외를next()
의default
매개변수로 처리하는 것이 중요합니다. more_itertools.ilen()
과 같은 라이브러리를 활용해len()
을 사용하는 경우, 추가 설치가 필요합니다.- 제너레이터(
yield
사용)를 통해 iterator를 생성할 경우, 복사본 생성이 불가능한 점을 주의해야 합니다.