본문 바로가기
IT silo

파이썬 제너레이터와 yield 키워드 완전정복: 메모리 효율과 실전 활용법!

by 테크사일로 2025. 6. 28.

파이썬 제너레이터와 yield 키워드 완전정복: 메모리 효율과 실전 활용법!

파이썬 제너레이터와 yield 키워드
파이썬 제너레이터와 yield 키워드

 

파이썬 제너레이터와 yield 키워드, 언제 어떻게 써야 할지 헷갈리셨나요? 이 글 하나로 yield의 개념부터 제너레이터 함수의 동작 원리, 실전 예제, 리스트 컴프리헨션과의 차이, 메모리 효율까지 완벽하게 정리해드립니다. yield는 대용량 데이터 처리, 무한 시퀀스 생성 등에서 파이썬 개발자라면 반드시 익혀야 할 핵심 키워드입니다.

많은 분들이 "yield와 return의 차이는?", "제너레이터는 언제 쓰는 게 좋을까?", "next, for문, send 등 다양한 활용법은?" 등 다양한 고민을 하시죠. 이 글에서 모든 궁금증을 해결하세요!

📋 목차

🔍제너레이터와 yield 기본 개념

제너레이터(Generator)는 yield 키워드를 사용해 이터레이터를 간단하게 생성하는 함수입니다. 일반 함수는 return으로 값을 한 번만 반환하고 끝나지만, 제너레이터 함수는 yield를 만날 때마다 값을 하나씩 반환하고, 실행을 일시 중단합니다.
다음에 다시 호출되면 중단된 지점부터 실행을 재개합니다.

  1. yield를 사용하면 함수가 제너레이터 객체를 반환
  2. next()나 for문으로 값을 하나씩 꺼낼 수 있음
  3. 메모리에 모든 값을 올리지 않고 필요할 때마다 생성(지연 평가, lazy evaluation)

한줄 요약: yield는 함수 실행을 일시 중단하고, 값을 하나씩 반환!

📝yield 동작 원리와 함수 구조

yield를 사용한 함수는 return 대신 yield로 값을 반환합니다. yield를 만나면 함수 실행이 멈추고, 값을 반환한 뒤 상태를 저장합니다. 다시 next()를 호출하면 이전 상태부터 실행을 재개합니다.

def my_gen(): yield 1 yield 2 yield 3
gen = my_gen()
print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3

더 이상 값이 없으면 StopIteration 예외 발생

for문으로도 제너레이터의 모든 값을 순회할 수 있습니다. 함수 내부 상태가 유지되므로 무한 시퀀스나 대용량 데이터 처리에 탁월합니다.

한줄 요약: yield는 실행 중단/재개, 함수 상태를 기억!

📊리스트 컴프리헨션 vs 제너레이터

구분 리스트 컴프리헨션 제너레이터
메모리 사용 모든 값 한 번에 생성 필요할 때만 값 생성
사용 예시 [x*x for x in range(1000000)] (x*x for x in range(1000000))
무한 시퀀스 불가 가능

한줄 요약: 제너레이터는 대용량·무한 데이터에 최적!

🎯실전 예제와 활용 패턴

  1. 기본 제너레이터
    def count_up_to(n): count = 1 while count <= n: yield count count += 1
    for num in count_up_to(5):
    print(num) # 1 2 3 4 5
    
  2. 무한 시퀀스 생성
    def infinite(): n = 0 while True: yield n n += 1
    gen = infinite()
    for i in range(10):
    print(next(gen)) # 0 ~ 9
    
  3. 파일 한 줄씩 읽기
    def read_lines(filename): with open(filename) as f: for line in f: yield line.strip()
    for line in read_lines('data.txt'):
    print(line)
    
  4. yield from 활용(3.3+)
    def gen_numbers(): yield from range(5)
    for n in gen_numbers():
    print(n) # 0 1 2 3 4
    
핵심 포인트
- yield는 실행 중단/재개, 함수 상태 유지
- next(), for문, yield from 등 다양한 활용
- 대용량·무한 데이터 처리에 메모리 효율 최강

한줄 요약: 실전에서 yield로 메모리와 효율 모두 잡기!

반응형

💡활용 꿀팁과 주의사항

  • yield를 사용한 함수는 항상 제너레이터 객체 반환
  • next()로 값을 꺼낼 때 더 이상 값이 없으면 StopIteration 예외 발생
  • send()로 외부에서 값을 전달하고, 코루틴처럼 양방향 통신 가능
  • yield from으로 다른 이터러블을 한 번에 yield 가능
  • 제너레이터는 for문, 리스트 변환 등 다양한 방식으로 순회 가능
핵심 포인트
- yield=메모리 효율, 무한 시퀀스, 지연 평가
- next, send, yield from 등 다양한 활용법
- 대용량 데이터, 파일 처리, 스트림에 특히 유용

한줄 요약: yield는 파이썬 메모리 효율의 핵심!

  • yield는 실행 중단/재개로 메모리 효율적 데이터 처리
  • 제너레이터는 무한 시퀀스, 대용량 데이터에 최적
  • next, for문, send, yield from 등 다양한 활용 가능

도움이 되셨다면 공감♥ 눌러주세요!

파이썬 제너레이터와 yield 키워드, 이제 완벽하게 이해하셨나요? 다음 글에서는 코루틴, 비동기 프로그래밍, 실전 데이터 파이프라인 등 더 깊이 있는 내용을 다룰 예정입니다. 궁금한 점이나 추가 질문은 댓글로 남겨주세요! 구독과 알림 설정도 잊지 마세요.

#파이썬yield #제너레이터 #yield키워드 #메모리효율 #지연평가 #파이썬기초 #for문 #next #yieldfrom #코딩학습 #파이썬2025

반응형