[python] 제너레이터와 이터레이터의 효율적인 활용

이터레이터와 제너레이터

이터레이터(iterator)제너레이터(generator)는 파이썬에서 데이터 스트림을 다루거나 생성할 때 사용되는 도구입니다.

이터레이터는 데이터 스트림을 순회하면서 하나의 요소를 반환하고, 다음 요소의 참조를 유지합니다. 보통 __iter__()__next__() 메서드를 구현하여 사용됩니다.

제너레이터는 이터레이터를 생성하는 함수로, yield 키워드를 사용하여 값을 반환하고 호출자에게 제어권을 넘겨줍니다. 이를 통해 다음 호출에서 이전 상태를 유지하고 값을 반환합니다.

이터레이터의 활용

이터레이터는 메모리를 효율적으로 사용할 수 있다는 장점이 있습니다. 데이터가 실시간으로 생성되거나 큰 데이터셋을 다룰 때 유용합니다.

다음은 간단한 이터레이터의 예시입니다.

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0
    
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.index < len(self.data):
            result = self.data[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration

제너레이터의 활용

제너레이터는 이터레이터에 비해 코드가 간결하고 효율적입니다. 동적으로 데이터를 생성하므로, 메모리를 효율적으로 사용할 수 있습니다.

다음은 제너레이터의 예시입니다.

def my_generator(data):
    for item in data:
        yield item

또는 조건에 부합하는 값을 생성하는 예시를 들어보겠습니다.

def even_numbers(n):
    for i in range(n):
        if i % 2 == 0:
            yield i

결론

이터레이터와 제너레이터는 데이터 스트림을 효율적으로 다루고 생성하기 위한 파이썬의 강력한 기능입니다. 이를 잘 활용하면 메모리를 효율적으로 활용하고 코드를 간결하게 작성할 수 있습니다.

참고문헌: