이터레이터와 제너레이터를 사용한 데이터 그룹화

이번 포스트에서는 이터레이터(Iterator)와 제너레이터(Generator)를 사용하여 데이터를 그룹화하는 방법에 대해 알아보겠습니다. 이러한 기능은 데이터 처리나 반복 작업을 수행하는데 매우 유용합니다.

이터레이터(Iterator)

이터레이터는 반복 가능한 객체(iterable)에서 값을 차례대로 꺼내는 객체입니다. __iter____next__라는 두 개의 매직 메서드를 구현하여 사용할 수 있습니다. 이터레이터는 반복문에서 사용되며, for문이나 next() 함수를 통해 값에 접근할 수 있습니다.

class MyIterator:
    def __init__(self, data):
        self.index = 0
        self.data = data

    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_iter = MyIterator(my_list)

for item in my_iter:
    print(item)

위 예시에서는 MyIterator 클래스를 정의하여 이터레이터를 구현했습니다. __iter__ 메서드는 이터레이터 객체 자체를 반환하며, __next__ 메서드는 다음 값을 반환하고 인덱스를 증가시킵니다. my_listMyIterator 클래스의 인스턴스로 생성하고, for문을 사용하여 값을 출력합니다.

제너레이터(Generator)

제너레이터는 이터레이터를 생성하기 위해 사용되는 함수입니다. 제너레이터 함수는 값을 반환하는 yield 키워드를 사용하여 값을 생성하고, 함수 호출이 끝나도 상태를 유지합니다.

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

my_list = [1, 2, 3, 4, 5]
my_gen = my_generator(my_list)

for item in my_gen:
    print(item)

위 예시에서는 my_generator 함수를 정의하여 제너레이터를 구현했습니다. for문을 사용하여 실제 값을 반환하는 것처럼 사용합니다. 제너레이터 함수를 호출하면 제너레이터 객체가 반환되며, 이를 반복하여 값을 얻을 수 있습니다.

정리

#tech #programming