본문 바로가기

프로그래밍 언어/파이썬

파이썬(Python) 제너레이터와 이터레이터

파이썬(Python) 제너레이터와 이터레이터

파이썬(Python)에서 제너레이터와 이터레이터는 메모리를 효율적으로 사용하면서 반복 가능한 객체를 생성하는 강력한 도구입니다. 이 글에서는 이터레이터와 제너레이터의 기본 개념부터 실제 사용 예제까지 다루어 보겠습니다.

 

 

 

1. 이터레이터란?

이터레이터는 반복 가능한 객체를 순차적으로 접근할 수 있는 객체입니다. 이터레이터 객체는 __iter__()__next__() 메서드를 구현해야 합니다. 예를 들어:

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

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

 

 

2. 제너레이터란?

제너레이터는 이터레이터를 생성하는 간편한 방법입니다. 제너레이터 함수는 yield 키워드를 사용하여 값을 하나씩 반환합니다. 예를 들어:

def my_generator():
    yield 1
    yield 2
    yield 3

# 사용 예제
for item in my_generator():
    print(item)

제너레이터는 호출될 때마다 이전 상태를 기억하고, 다음 yield 문에서 실행을 재개합니다.

 

 

3. 이터레이터와 제너레이터의 차이점

이터레이터와 제너레이터는 모두 반복 가능한 객체를 생성하는 데 사용되지만, 구현 방식에 차이가 있습니다. 이터레이터는 클래스 형태로 __iter__()__next__() 메서드를 구현해야 하지만, 제너레이터는 함수 형태로 yield 키워드를 사용해 간단히 구현할 수 있습니다.

 

 

4. 제너레이터 함수와 제너레이터 표현식

제너레이터 함수는 yield 키워드를 사용해 값을 반환하는 함수입니다. 제너레이터 표현식은 제너레이터를 생성하는 간단한 문법으로, 리스트 컴프리헨션과 비슷한 형태를 가집니다. 예를 들어:

# 제너레이터 함수
def my_generator():
    for i in range(4):
        yield i

# 제너레이터 표현식
my_gen_exp = (x * x for x in range(4))

# 사용 예제
print(list(my_generator()))  # [0, 1, 2, 3]
print(list(my_gen_exp))  # [0, 1, 4, 9]

 

 

 

 

5. 실전 예제: 파일 읽기와 데이터 처리

제너레이터를 사용하면 대용량 파일을 효율적으로 읽고 처리할 수 있습니다. 예를 들어:

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line.strip()

# 사용 예제
for line in read_large_file('large_file.txt'):
    print(line)

이 예제에서는 파일의 각 줄을 제너레이터로 처리하여 메모리 사용을 최소화합니다.

 

 

6. 결론

파이썬(Python)에서 제너레이터와 이터레이터는 반복 가능한 객체를 효율적으로 생성하고 처리하는 데 유용한 도구입니다. 제너레이터를 사용하면 간결하고 메모리 효율적인 코드를 작성할 수 있으며, 이터레이터를 통해 커스텀 반복 동작을 정의할 수 있습니다. 제너레이터와 이터레이터의 개념을 이해하고 다양한 상황에서 활용해 보세요.