![[Python] 파이썬 이터레이터(Iterator)와 제너레이터(Generator) [Python] 파이썬 이터레이터(Iterator)와 제너레이터(Generator)](https://blog.kakaocdn.net/dn/doTbPK/btsxp9rpMQi/BWY32Wh37VsGwdgWjgAHcK/img.png)
안녕하세요! 오늘은 파이썬의 이터레이터와 제너레이터에 대해 알아보겠습니다. 이 두 가지 개념은 파이썬에서 매우 중요한 역할을 합니다. 이터레이터와 제너레이터를 이해하면 코드를 더욱 효율적으로 작성할 수 있고, 메모리를 절약할 수 있습니다.
1. 이터레이터(Iterator)란?
이터레이터는 파이썬에서 순회 가능한 객체를 나타내는 인터페이스입니다. 이터레이터는 __iter__()와 __next__() 메서드를 구현해야 합니다. __iter__() 메서드는 이터레이터 객체 자체를 반환하고, __next__() 메서드는 다음 값을 반환합니다. 이터레이터는 for 루프를 사용하여 순회할 수 있습니다.
2. 제너레이터(Generator)란?
제너레이터는 이터레이터를 생성하는 함수입니다. 제너레이터 함수는 일반 함수와 비슷하지만, yield 키워드를 사용하여 값을 반환하고 일시적으로 상태를 유지할 수 있습니다. 제너레이터 함수는 호출될 때마다 이터레이터 객체를 반환하며, yield 키워드를 만나면 값을 반환하고 일시 중단합니다. 다음 호출 때마다 일시 중단된 지점부터 다시 실행됩니다.
3. 이터레이터와 제너레이터의 차이점
이터레이터와 제너레이터는 모두 순회 가능한 객체를 생성하는 데 사용됩니다. 그러나 이 두 가지 개념은 몇 가지 차이점이 있습니다.
- 이터레이터는 클래스로 구현되고,
__iter__()와__next__()메서드를 구현해야 합니다. 제너레이터는 함수로 구현되고,yield키워드를 사용하여 값을 반환하고 일시 중단합니다. - 이터레이터는 한 번에 하나의 항목을 반환하고, 제너레이터는 여러 개의 항목을 반환할 수 있습니다.
- 이터레이터는 명시적으로 호출되어야 하지만, 제너레이터는 호출될 때마다 이터레이터 객체를 반환합니다.
- 이터레이터는 상태를 유지하지 않지만, 제너레이터는
yield키워드를 사용하여 상태를 유지합니다.
4. 이터레이터와 제너레이터의 활용
이터레이터와 제너레이터는 다양한 상황에서 유용하게 사용될 수 있습니다. 예를 들어, 대용량 데이터를 처리해야 할 때 메모리를 절약할 수 있습니다. 이터레이터와 제너레이터는 데이터를 한 번에 하나씩 처리하므로, 전체 데이터를 한 번에 메모리에 로드할 필요가 없습니다.
또한, 이터레이터와 제너레이터는 무한한 시퀀스를 생성할 수 있습니다. 예를 들어, 피보나치 수열과 같은 무한한 시퀀스를 생성하는 것이 가능합니다. 이러한 무한한 시퀀스를 생성하는 데에는 제너레이터가 더 적합합니다.
5. 예시 코드
아래는 이터레이터와 제너레이터의 예시 코드입니다.
# 이터레이터 예시
class MyIterator: def __init__(self, max_num): self.max_num = max_num self.current_num = 0 def __iter__(self): return self def __next__(self): if self.current_num < self.max_num: self.current_num += 1 return self.current_num else: raise StopIteration # 제너레이터 예시 def my_generator(max_num): current_num = 0 while current_num < max_num: current_num += 1 yield current_num
6. 결론
이터레이터와 제너레이터는 파이썬에서 매우 유용한 개념입니다. 이 두 가지 개념을 이해하고 활용하면 코드를 더욱 효율적으로 작성할 수 있고, 메모리를 절약할 수 있습니다. 이터레이터와 제너레이터는 파이썬의 강력한 기능 중 하나이므로, 꼭 숙지하고 활용해보시기 바랍니다.
