본문 바로가기
프로그래밍언어/파이썬[중급]

[파이썬][중급] Chapter11. 제너레이터 함수와 yield

by about_IT 2025. 5. 18.
728x90

제너레이터(generator)는 반복 가능한(iterable) 값을 하나씩 생성해주는 함수입니다. yield 키워드를 사용하여 값을 반환하며, 매 호출 시 이전 상태를 유지하기 때문에 메모리 효율성이 뛰어납니다. 특히 대용량 데이터 처리나 무한 시퀀스를 다룰 때 유리합니다.


● 제너레이터 함수란?

yield 키워드를 포함하는 함수는 제너레이터 함수로 간주되며, 실행 시 함수 내부 코드가 즉시 실행되지 않고 generator object를 반환합니다.

def count_up_to(n):
    i = 1
    while i <= n:
        yield i
        i += 1

for num in count_up_to(5):
    print(num)

이 예제는 1부터 n까지의 숫자를 하나씩 생성하며, yield에 도달할 때마다 현재 값이 반환되고 함수 상태가 보존됩니다.


● yield vs return

  • return은 함수 실행을 종료하고 단 한 번의 값을 반환
  • yield는 함수 실행을 일시 중지하고, 여러 번 값을 생성
  • yield는 상태를 기억하므로 루프처럼 동작함

● 제너레이터 표현식

리스트 컴프리헨션과 유사하게 제너레이터도 컴프리헨션 형태로 정의할 수 있습니다. 이 경우 소괄호 ()를 사용합니다.

squares = (x**2 for x in range(5))
for s in squares:
    print(s)

이 방식은 리스트보다 메모리를 덜 사용하므로 반복 처리에 효율적입니다.


● next()로 값 추출하기

제너레이터 객체는 next() 함수를 통해 직접 값을 꺼낼 수 있으며, 더 이상 값이 없으면 StopIteration 예외를 발생시킵니다.

gen = count_up_to(3)
print(next(gen))  # 1
print(next(gen))  # 2

● 마무리

제너레이터는 반복 처리에서 성능을 높이고 메모리를 아끼는 데 매우 유용한 도구입니다. 특히 대용량 로그 분석, 스트리밍 데이터 처리 등에서 필수적인 기능이므로 꼭 익혀두시기 바랍니다.

728x90