이터레이터와 제너레이터를 활용한 데이터 흐름 제어

이터레이터와 제너레이터는 데이터 흐름을 제어하기 위해 매우 유용한 도구입니다. 이들을 사용하면 데이터를 순차적으로 처리하고 필요한 만큼의 데이터를 생성할 수 있습니다. 이번 포스트에서는 이터레이터와 제너레이터의 개념과 활용 방법을 살펴보겠습니다.

이터레이터란?

이터레이터는 컬렉션 내의 요소들을 차례대로 접근할 수 있는 객체입니다. 이터레이터는 __iter__()__next__() 메서드를 구현하여 동작합니다. __iter__() 메서드는 이터레이터 객체 자체를 반환하고, __next__() 메서드는 다음 요소를 반환합니다. 만약 더 이상 요소가 없을 경우 StopIteration 예외를 발생시킵니다.

아래는 이터레이터의 예시 코드입니다.

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):
            raise StopIteration
        result = self.data[self.index]
        self.index += 1
        return result

my_list = ['apple', 'banana', 'cherry']
my_iter = MyIterator(my_list)

for item in my_iter:
    print(item)

제너레이터란?

제너레이터는 이터레이터를 생성하는 함수입니다. 제너레이터 함수는 yield 키워드를 사용하여 데이터를 반환하고 일시 중단하며, 다음 호출 시 이전 상태를 유지한 후 다음 데이터를 반환합니다. 이렇게 하면 필요한 시점에서 데이터를 생성하고 반환할 수 있습니다.

아래는 제너레이터의 예시 코드입니다.

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

my_list = ['apple', 'banana', 'cherry']
my_gen = my_generator(my_list)

for item in my_gen:
    print(item)

마무리

이터레이터와 제너레이터를 활용하면 데이터를 효율적으로 처리하고 제어할 수 있습니다. 이들은 컬렉션의 크기에 상관없이 필요한 만큼의 데이터를 처리할 수 있다는 큰 장점을 가지고 있습니다. 따라서 이터레이터와 제너레이터를 적절히 활용하여 데이터 흐름을 제어하는 것을 고려해 보세요.

#tech #python