이터레이터와 제너레이터를 활용한 데이터 통신

이터레이터와 제너레이터는 파이썬에서 데이터를 효과적으로 처리하고 통신하는 것에 매우 유용한 도구입니다. 이들을 활용하면 효율적인 코드 작성과 메모리 사용량을 최적화할 수 있습니다. 이번 포스트에서는 이터레이터와 제너레이터의 개념과 여러 사용 예시들에 대해 살펴보겠습니다.

이터레이터 (Iterator)

이터레이터는 순회 가능한 객체에서 한 번에 한 항목을 반환하는 객체입니다. 이터레이터를 만들기 위해서는 __iter__()__next__() 메서드를 구현해야 합니다. __iter__() 메서드는 이터레이터 객체 자체를 반환하고, __next__() 메서드는 다음 항목을 반환하거나, 더 이상 항목이 없을 경우 StopIteration 예외를 발생시킵니다.

아래는 1부터 5까지 반복적으로 출력하는 간단한 이터레이터의 예시입니다.

class MyIterator:
    def __iter__(self):
        self.current = 1
        return self

    def __next__(self):
        if self.current > 5:
            raise StopIteration
        else:
            self.current += 1
            return self.current - 1

my_iterator = MyIterator()
for item in my_iterator:
    print(item)

출력 결과는 다음과 같습니다:

1
2
3
4
5

제너레이터 (Generator)

제너레이터는 이터레이터를 생성하는 함수입니다. 제너레이터 함수는 yield 키워드를 사용하여 데이터를 생성하고 반환합니다. 이 때, 함수의 실행은 일시 중단되고, 다음 호출 시 이전 상태부터 실행이 이어집니다.

아래는 1부터 5까지 반복적으로 출력하는 제너레이터 함수의 예시입니다.

def my_generator():
    current = 1
    while current <= 5:
        yield current
        current += 1

gen = my_generator()
for item in gen:
    print(item)

출력 결과는 이전 예시와 동일합니다:

1
2
3
4
5

데이터 통신에 이터레이터와 제너레이터 활용하기

이터레이터와 제너레이터는 데이터 통신에 유용하게 활용될 수 있습니다. 예를 들어, 대용량의 데이터를 한 번에 읽어들이는 것이 메모리 낭비일 수 있습니다. 이때 이터레이터와 제너레이터를 사용하여 데이터를 조금씩 읽어와 처리함으로써 메모리 사용량을 최소화할 수 있습니다.

또한, 네트워크 통신 등의 작업에서는 데이터의 일부분을 수신하고 처리하는 과정을 여러 번 반복해야 할 수 있습니다. 이때도 이터레이터와 제너레이터를 사용하여 필요한 만큼의 데이터만 받아와 처리할 수 있습니다.

이터레이터와 제너레이터는 데이터 처리와 통신 과정에서 유용한 도구로 사용될 수 있습니다. 파이썬에서 이들을 잘 활용한다면 효율적이고 성능이 우수한 코드를 작성할 수 있습니다.

#tech #python