이터레이터(Iterator)는 컬렉션의 원소를 순차적으로 접근하는 표준 인터페이스다. 내부 구현을 숨기고 동일한 방식으로 배열, 연결 리스트, 트리, 무한 시퀀스를 순회할 수 있다.
이터레이터 프로토콜
python
# Python 이터레이터 프로토콜
class Range:
def __init__(self, n):
self.n = n
self.current = 0
def __iter__(self):
return self # 이터레이터 자신 반환
def __next__(self):
if self.current >= self.n:
raise StopIteration # 순회 종료 신호
val = self.current
self.current += 1
return val
for x in Range(5): # 0 1 2 3 4
print(x)
# 내장 이터레이터 생성
it = iter([1, 2, 3])
print(next(it)) # 1
print(next(it)) # 2
Java Iterator
java
List<String> list = Arrays.asList("a", "b", "c");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String elem = it.next();
System.out.println(elem);
}
// 또는 for-each (이터레이터 자동 사용)
for (String s : list) { ... }
- •컬렉션 구현과 순회 로직 분리
- •동일한 코드로 다양한 자료구조 처리
- •지연 평가(lazy evaluation) 가능
무한 이터레이터
python
import itertools
# 무한 카운터 (필요한 만큼만 소비)
counter = itertools.count(start=0, step=2) # 0, 2, 4, 6...
# 처음 5개만 가져오기
first5 = list(itertools.islice(counter, 5)) # [0, 2, 4, 6, 8]
관련 개념