Home

(파이썬) 이터레이터(Iterator) vs 제너레이터(Generator) 차이 완벽 이해하기

Published in python
November 21, 2025
2 min read
(파이썬) 이터레이터(Iterator) vs 제너레이터(Generator) 차이 완벽 이해하기

안녕하세요, 코딩하는곰입니다! 🐾 파이썬을 사용하다 보면 ‘이터레이터(Iterator)‘와 ‘제너레이터(Generator)‘라는 용어를 자주 접하게 됩니다. 두 개념 모두 데이터를 순회하고 처리하는 데 사용되지만, 많은 분들이 이 둘의 차이를 명확히 이해하지 못하는 경우가 많아요. 오늘은 이터레이터와 제너레이터의 개념부터 구현 방법, 차이점까지 자세히 알아보겠습니다. 파이썬 코드를 더 효율적으로 작성하는 데 큰 도움이 될 거예요!

이터레이터(Iterator)란 무엇인가?

이터레이터는 파이썬에서 반복 가능한 객체를 순회할 때 사용되는 핵심 개념입니다. 리스트, 튜플, 딕셔너리와 같은 컬�이너리 객체의 요소에 하나씩 접근할 수 있게 해주는 객체라고 생각하시면 됩니다.

이터레이터의 기본 동작 원리

이터레이터는 iter() 함수와 next() 함수를 통해 동작합니다. iter() 함수는 이터러블 객체에서 이터레이터를 생성하고, next() 함수는 이터레이터에서 다음 값을 가져옵니다.

# 리스트를 이터레이터로 변환
my_list = [1, 2, 3, 4, 5]
my_iterator = iter(my_list)
print(next(my_iterator)) # 1
print(next(my_iterator)) # 2
print(next(my_iterator)) # 3
print(next(my_iterator)) # 4
print(next(my_iterator)) # 5
# print(next(my_iterator)) # StopIteration 예외 발생

커스텀 이터레이터 클래스 구현

파이썬에서 이터레이터를 직접 구현하려면 __iter__() 메서드와 __next__() 메서드를 클래스에 정의해야 합니다. __iter__() 메서드는 이터레이터 객체 자신을 반환하고, __next__() 메서드는 다음 값을 반환하거나 모든 값을 소진한 경우 StopIteration 예외를 발생시킵니다.

class MyIterator:
def __init__(self, max_value):
self.current = 0
self.max_value = max_value
def __iter__(self):
return self
def __next__(self):
if self.current < self.max_value:
self.current += 1
return self.current
else:
raise StopIteration
# 사용 예제
my_iter = MyIterator(5)
for num in my_iter:
print(num) # 1, 2, 3, 4, 5 출력

이터레이터를 사용하면 메모리 효율성을 높일 수 있습니다. 모든 데이터를 한 번에 메모리에 로드하지 않고 필요할 때마다 하나씩 처리할 수 있기 때문이죠. 특히 대용량 데이터를 다룰 때 이터레이터의 장점이 두드러집니다.

(파이썬) 이터레이터(Iterator) vs 제너레이터(Generator) 차이 완벽 이해하기
(파이썬) 이터레이터(Iterator) vs 제너레이터(Generator) 차이 완벽 이해하기


🌐 웹 개발에 관심이 있다면, (파이썬 완벽 가이드) 이스케이프 문자 총정리 - 코딩하는곰의 기술 블로그를 참고해보세요.

제너레이터(Generator)란 무엇인가?

제너레이터는 이터레이터를 생성하는 간단하고 강력한 도구입니다. 함수처럼 정의하지만, return 대신 yield 키워드를 사용하여 값을 반환한다는 점이 특징입니다. 제너레이터 함수는 호출되어도 즉시 실행되지 않고, 제너레이터 객체를 반환합니다.

제너레이터 함수의 기본 구조

제너레이터 함수는 일반 함수와 비슷하게 정의하지만, 값을 반환할 때 yield 키워드를 사용합니다. yield는 함수의 실행을 일시 중단하고 값을 반환하며, 다음 next() 호출 시 중단된 위치에서 실행을 재개합니다.

def my_generator(max_value):
current = 0
while current < max_value:
current += 1
yield current
# 사용 예제
gen = my_generator(5)
print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3
print(next(gen)) # 4
print(next(gen)) # 5
# print(next(gen)) # StopIteration 예외 발생

제너레이터 표현식(Generator Expression)

제너레이터 표현식은 리스트 컴프리헨션과 유사한 문법으로 제너레이터를 생성하는 방법입니다. 대괄호([]) 대신 소괄호(())를 사용합니다.

# 제너레이터 표현식
squares_gen = (x*x for x in range(1, 6))
for square in squares_gen:
print(square) # 1, 4, 9, 16, 25 출력

제너레이터의 가장 큰 장점은 메모리 효율성입니다. 모든 값을 메모리에 저장하지 않고 필요할 때마다 생성하기 때문에 대용량 데이터 스트림을 처리할 때 매우 유용합니다.

(파이썬) 이터레이터(Iterator) vs 제너레이터(Generator) 차이 완벽 이해하기
(파이썬) 이터레이터(Iterator) vs 제너레이터(Generator) 차이 완벽 이해하기


집중력과 논리적 사고력을 기르고 싶다면, 클래식, 데일리, 스토리 모드가 있는 스도쿠 저니를 설치해보세요.

이터레이터 vs 제너레이터: 핵심 차이점 비교

이제 이터레이터와 제너레이터의 주요 차이점을 구체적으로 비교해보겠습니다.

1. 구현 방식의 차이

이터레이터: 클래스 기반 구현으로 __iter__()__next__() 메서드를 명시적으로 정의해야 합니다.

class SquareIterator:
def __init__(self, max_value):
self.current = 0
self.max_value = max_value
def __iter__(self):
return self
def __next__(self):
if self.current < self.max_value:
self.current += 1
return self.current * self.current
raise StopIteration

제너레이터: 함수 기반 구현으로 yield 키워드를 사용해 간단하게 구현할 수 있습니다.

def square_generator(max_value):
current = 0
while current < max_value:
current += 1
yield current * current

2. 메모리 사용량 비교

제너레이터는 이터레이터보다 메모리 사용량이 더 적습니다. 제너레이터는 값을 필요한 시점에 생성하지만, 이터레이터는 모든 값을 메모리에 보관할 수 있습니다.

import sys
# 큰 범위의 데이터를 처리할 때 메모리 사용량 비교
iterator_size = sys.getsizeof([x for x in range(1000000)]) # 리스트 컴프리헨션
generator_size = sys.getsizeof(x for x in range(1000000)) # 제너레이터 표현식
print(f"Iterator size: {iterator_size} bytes") # 훨씬 큰 값
print(f"Generator size: {generator_size} bytes") # 매우 작은 값

3. 상태 관리와 재사용성

이터레이터는 명시적인 상태를 가지며 재사용이 가능한 반면, 제너레이터는 일회성 사용에 더 적합합니다.

# 이터레이터 재사용
class CountIterator:
def __init__(self):
self.count = 0
def __iter__(self):
return self
def __next__(self):
if self.count < 3:
self.count += 1
return self.count
raise StopIteration
counter = CountIterator()
print(list(counter)) # [1, 2, 3]
# print(list(counter)) # [] - 이미 소진됨
# 제너레이터 함수 재호출
def count_generator():
count = 0
while count < 3:
count += 1
yield count
gen1 = count_generator()
print(list(gen1)) # [1, 2, 3]
gen2 = count_generator() # 새로운 제너레이터 생성
print(list(gen2)) # [1, 2, 3]

4. 성능과 사용 사례

이터레이터는 복잡한 상태 관리가 필요할 때 유용하며, 제너레이터는 간단한 데이터 스트림이나 큰 데이터셋을 처리할 때 더 효율적입니다.

(파이썬) 이터레이터(Iterator) vs 제너레이터(Generator) 차이 완벽 이해하기
(파이썬) 이터레이터(Iterator) vs 제너레이터(Generator) 차이 완벽 이해하기


웹사이트나 이벤트 페이지로 연결되는 QR 코드를 쉽게 만들고 싶다면, 사이즈 조절과 다운로드가 가능한 QR 코드 도구를 추천합니다.

이렇게 파이썬의 이터레이터와 제너레이터에 대해 자세히 알아보았습니다. 두 개념 모두 데이터를 효율적으로 순회하고 처리하는 강력한 도구지만, 각각의 특징과 적절한 사용 사례가 다릅니다. 이터레이터는 클래스 기반으로 더 많은 제어와 상태 관리가 필요할 때, 제너레이터는 간단한 구현과 메모리 효율성이 중요할 때 선택하는 것이 좋습니다. 실제 프로젝트에서는 두 개념을 상황에 맞게灵活하게 활용하는 것이 중요하겠죠! 파이썬 프로그래밍 실력을 한 단계 업그레이드하는 데 이 글이 도움이 되셨기를 바랍니다. 다음에도 유용한 파이썬 팁으로 찾아뵙겠습니다. 코딩하는곰이었습니다! 🐾 궁금한 점이 있으시면 댓글로 남겨주세요. 함께 공부하고 성장해봐요!

게임이나 SNS에서 쓸 닉네임이 고민된다면, 카테고리별로 추천해주는 닉네임 생성기를 활용해보세요.









최상의 건강을 위한 영양가득한 식품과 정보! life-plus.co.kr 바로가기
최상의 건강을 위한 영양가득한 식품과 정보! life-plus.co.kr 바로가기



다채로운 문화축제와 공연 소식을 공유하는 블로그! culturestage.co.kr 바로가기
다채로운 문화축제와 공연 소식을 공유하는 블로그! culturestage.co.kr 바로가기



비트코인 세계로의 첫걸음! 지금 가입하고 거래 수수료 할인 혜택 받으세요! bitget.com 바로가기
비트코인 세계로의 첫걸음! 지금 가입하고 거래 수수료 할인 혜택 받으세요! bitget.com 바로가기




Tags

#developer#coding#python

Share

Previous Article
파이썬 데이터 시각화, matplotlib로 시작하는 그래프 한 눈에 보기

Table Of Contents

1
이터레이터(Iterator)란 무엇인가?
2
제너레이터(Generator)란 무엇인가?
3
이터레이터 vs 제너레이터: 핵심 차이점 비교

Related Posts

(파이썬 기초 마스터) 함수 정의(def)와 호출, return의 모든 것 - 코딩하는곰의 친절한 가이드
December 26, 2025
3 min