이터레이터와 제너레이터를 활용한 데이터 탐색 및 트래버스

이터레이터와 제너레이터는 파이썬에서 매우 강력한 기능을 제공하는 개념입니다. 이들을 활용하면 데이터 탐색과 트래버스(Traversal)를 훨씬 효율적으로 수행할 수 있습니다.

이터레이터(Iterator)

이터레이터는 순회 가능한(iterable) 객체에서 요소를 하나씩 차례대로 꺼내올 수 있는 객체를 말합니다. __iter____next__ 메소드를 정의하는 클래스를 생성하거나 iter() 함수를 사용하여 이터레이터 객체를 생성할 수 있습니다.

이터레이터를 사용하면 메모리를 효율적으로 관리할 수 있습니다. 예를 들어, 매우 큰 파일을 읽을 때 이터레이터를 사용하면 전체 파일을 한 번에 메모리에 로드하지 않고 필요한 만큼의 데이터만 읽을 수 있습니다.

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
        value = self.data[self.index]
        self.index += 1
        return value

# 예제 사용
my_list = [1, 2, 3, 4, 5]
my_iterator = MyIterator(my_list)
for item in my_iterator:
    print(item)

제너레이터(Generator)

제너레이터는 이터레이터를 생성하는 함수입니다. 함수 안에서 yield 키워드를 사용하여 값을 반환하며, 제너레이터가 호출될 때마다 yield 키워드 직전까지 실행되고 일시 정지됩니다.

제너레이터는 이터레이터와 비슷한 동작을 하지만, 상태를 기억하고 있으므로 반복 도중에 멈추고 나중에 다시 시작할 수 있습니다. 이는 매우 큰 데이터 집합을 처리할 때 유용합니다.

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

# 예제 사용
my_list = [1, 2, 3, 4, 5]
my_generator = my_generator(my_list)
for item in my_generator:
    print(item)

마무리

이터레이터와 제너레이터는 파이썬에서 데이터 탐색과 트래버스를 보다 효율적으로 처리하기 위한 강력한 기능입니다. 이러한 기능을 활용하면 큰 데이터 집합을 처리하고 메모리를 효율적으로 관리할 수 있습니다.

#python #이터레이터 #제너레이터