https://docs.python.org/3/tutorial/classes.html#generators
주로 사용
- 큰 데이터/스트림: 전체를 메모리에 올리지 않고 한 항목씩 처리할 때(로그 스트림, 큰 파일, DB 커서 등).
- 지연 계산: 필요한 시점까지 계산을 미루어 성능/지연 최적화할 때.
- 파이프라인 구성: 데이터를 단계별로 변환하는 파이프를 간결하게 짤 때(map/filter 스타일).
- 무한/장시간 시퀀스: 끝이 없거나 길이를 모르는 시퀀스를 표현할 때(센서 값,반복 샘플 등).
- 상태 보존 반복자: 클래스 이터레이터보다 짧게, 내부 상태를 로컬 변수로 자연스럽게 유지하고 싶을 때.
제너레이터 핵심 요약:
- 함수처럼 작성하되 return 대신 yield로 값을 하나씩 내보냅니다.
- next()/for가 호출될 때마다 직전 위치와 로컬 상태를 기억했다가 이어서 실행합니다.
__iter__/__next__를 자동 생성해 주므로 클래스 기반 이터레이터보다 코드가 짧습니다.- 실행이 끝나면 자동으로 StopIteration을 발생시킵니다.
def reverse(data):
for i in range(len(data) - 1, -1, -1):
yield data[i]
for ch in reverse("golf"):
print(ch)
# f l o g요점: 이터레이터를 만들 때 상태 보존과 종료 처리를 알아서 해 주는 “yield 함수”라고 보면 됩니다.