태지쌤

로봇 & 코딩교육 No.1 크리에이터

파이썬

파이썬 제너레이터(Generator) 완전 쉬운 설명! yield와 next()로 시작하는 마법 같은 함수

태지쌤 2026. 2. 4. 08:50
반응형

https://link.coupang.com/a/dFFPS6

 

Do it 점프 투 파이썬 + (헬로든든 떡메모지 증정) - 프로그래밍 언어 | 쿠팡

쿠팡에서 Do it 점프 투 파이썬 + (헬로든든 떡메모지 증정) 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 프로그래밍 언어 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

 

파이썬 제너레이터(Generator) 완전 쉬운 설명! yield와 next()로 시작하는 마법 같은 함수

AI 활용

 

안녕하세요! 파이썬을 공부하다 보면 언젠가 꼭 만나는 개념이 바로 제너레이터(Generator)예요.

처음 보면 "이게 뭐지? 함수인데 왜 리스트처럼 쓸 수 있지?" 하면서 살짝 당황할 수 있어요.

저도 처음엔 그랬거든요 😅

하지만 한 번 이해하고 나면 "아, 이게 이렇게 편한 거였어!" 하고 감탄하게 될 거예요.

오늘은 초보자도 쉽게 따라올 수 있도록

- 제너레이터가 뭔지

- 왜 쓰는지

- yield 키워드와 next() 함수를 어떻게 사용하는지

실제 코드 예시까지 차근차근 알려드릴게요!

제너레이터란? (정의)

일반 함수는 `return`으로 값을 한 번 반환하고 끝나요.

하지만 제너레이터 함수는 `yield` 키워드를 사용해서 값을 하나씩 반환하면서도 함수의 실행 상태를 기억해요.

즉, 제너레이터는 필요할 때마다 값을 하나씩 만들어서 주는 '게으른(lazy) 리스트' 같은 거예요.

제너레이터를 만들면 바로 값이 계산되는 게 아니라, 우리가 `next()`로 요청할 때마다 그때그때 값을 만들어내요.

왜 제너레이터를 쓸까? (사용 이유)

가장 큰 장점은 메모리 절약이에요!

예를 들어 1부터 100만까지 숫자를 리스트로 만들면

그 모든 숫자가 메모리에 한 번에 올라가요 → 메모리 많이 먹음!

하지만 제너레이터라면

100만 개를 한 번에 만들지 않고, 필요할 때 하나씩만 만들어서 줘요 → 메모리 거의 안 먹음!

특히 큰 데이터를 처리하거나 무한 수열을 다룰 때 진짜 유용해요.

실제 코드로 이해해보기

예제 1: 간단한 제너레이터 만들기

def count_up_to(n):
    num = 1
    while num <= n:
        yield num  # 여기서 값을 하나씩 양보(yield)한다
        num += 1

# 제너레이터 객체 생성
counter = count_up_to(5)

print(counter)  # <generator object count_up_to at 0x...> 출력됨

이 상태에서는 아직 아무 일도 안 일어나요!

제너레이터 객체가 만들어졌을 뿐이에요.

이제 `next()`로 값을 하나씩 꺼내보죠:

print(next(counter))  # 1
print(next(counter))  # 2
print(next(counter))  # 3
print(next(counter))  # 4
print(next(counter))  # 5

# 더 꺼내려고 하면 StopIteration 에러 발생!

`next()`를 호출할 때마다 함수 내부 코드가 `yield`까지 실행되고,

다음 `next()`를 기다리며 멈춰 있어요.

마치 함수가 "여기까지 하고 잠깐 쉬었다가 다음에 이어서 할게요~" 하는 느낌!

예제 2: for 문으로 쉽게 사용하기 (실제로는 이렇게 많이 써요!)

제너레이터는 `for` 문에서 바로 쓸 수 있어서 더 편해요:

 

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

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

`for` 문이 내부적으로 `next()`를 자동으로 호출해줘요.

초보자는 이 방식이 훨씬 편할 거예요!

예제 3: 무한 수열 만들기 (제너레이터의 진짜 힘!)

def infinite_numbers():
    num = 1
    while True:
        yield num
        num += 1

gen = infinite_numbers()

print(next(gen))  # 1
print(next(gen))  # 2
print(next(gen))  # 3
# 계속 계속... 무한히 가능!

리스트로는 절대 못 만들 무한 수열도 제너레이터라면 가능해요!

마무리하며

제너레이터는 처음엔 조금 낯설지만,

`yield`는 "여기서 값 하나 주고 잠깐 멈춰!"라고 생각하면 돼요.

그리고 `next()`나 `for` 문으로 값을 하나씩 꺼내면서 함수가 다시 깨어나는 거죠.

큰 데이터를 다룰 때나 메모리를 아끼고 싶을 때

제너레이터를 떠올려보세요. 진짜 마법 같은 도구예요 ✨

AI 활용

#파이썬 #제너레이터 #yield #next #파이썬초보 #파이썬기초 #코딩공부 #프로그래밍기초 #파이썬튜토리얼 #Generator

 
반응형