파이썬 이터레이터(Iterator) 이해하기: 개념과 사용 예제

파이썬 이터레이터(Iterator) 이해하기: 개념과 사용 예제

파이썬의 이터레이터는 자료형의 원소를 차례대로 접근하는 방식을 제공합니다. 이번 글에서는 이터레이터가 무엇인지, 그리고 파이썬에서 어떻게 사용하는지 대해 알아보겠습니다.

▼ 목차

  1. 이터레이터의 정의
  2. 이터레이터의 필요성
  3. 파이썬에서의 이터레이터 사용법
  4. 이터레이터 만드는 방법
  5. 이터레이터 사용 예제

1. 이터레이터의 정의

이터레이터는 자료형의 원소를 차례대로 접근하는 방법을 제공하는 객체입니다. 파이썬의 이터레이터 프로토콜(Iterator Protocol)을 따르는 모든 객체가 이터레이터라 할 수 있습니다.

2. 이터레이터의 필요성

이터레이터는 크게 두 가지 장점이 있습니다. 첫째, 모든 자료형에 대해 일관된 방법으로 원소에 접근할 수 있습니다. 둘째, 큰 데이터 집합을 다룰 때 메모리 효율성을 높일 수 있습니다.

3. 파이썬에서의 이터레이터 사용법

파이썬의 내장 함수인 ‘iter()‘를 사용해 이터레이터 객체를 생성할 수 있습니다. 이 후 ‘next()‘ 함수를 사용해 이터레이터의 다음 원소에 접근할 수 있습니다.


▼ 예제 코드

it = iter([1, 2, 3])  # 리스트 [1, 2, 3]에 대한 이터레이터 생성
print(next(it))  # 이터레이터의 첫 번째 요소 '1' 출력
print(next(it))  # 이터레이터의 두 번째 요소 '2' 출력
print(next(it))  # 이터레이터의 세 번째 요소 '3' 출력
print(next(it))  # 이터레이터에 더 이상 반환할 요소가 없으므로 StopIteration 오류 발생

위 코드 ‘iter()’ 함수는 리스트와 같은 반복 가능한 객체를 받아 이터레이터를 반환합니다. ‘next()’ 함수는 이터레이터를 인자로 받아 다음 요소를 반환합니다. 다음 요소가 없을 때 ‘StopIteration’ 예외를 발생시킵니다.

4. 이터레이터 만드는 방법

클래스를 정의하고 ‘__iter__()‘ 메소드와 ‘__next__()’ 메소드를 구현하면 사용자 정의 이터레이터를 만들 수 있습니다.


▼ 예제 코드

class MyIterator:
    def __init__(self, start, end):
        self.current = start  # 초기 시작점 설정
        self.end = end  # 반복을 끝낼 지점 설정

    def __iter__(self):
        return self  # 인스턴스 자신을 반환

    def __next__(self):
        if self.current < self.end:  # 현재 값이 끝나는 지점보다 작은 경우
            num = self.current  # 현재 값을 num에 저장
            self.current += 1  # 현재 값을 1 증가시킴
            return num  # num 반환
        else:
            raise StopIteration  # 반복의 끝을 알림

위 클래스는 MyIterator라는 이름의 이터레이터를 정의합니다. 이터레이터는 ‘__iter__()‘ 메소드와 ‘__next__()‘ 메소드를 포함하며, __iter__() 메소드는 이터레이터 객체 자신을 반환하고, __next__() 메소드는 다음 값을 반환하거나, 더 이상 반환할 값이 없을 때 StopIteration 예외를 발생시킵니다.

5. 이터레이터 사용 예제

1. 앞서 정의한 ‘MyIterator‘를 사용하여 이터레이터를 만들어 보겠습니다. MyIterator는 시작 숫자와 끝 숫자를 입력받아, 시작 숫자부터 끝 숫자 전까지의 숫자를 차례대로 반환하는 이터레이터입니다.

▼ 예제 코드

it = MyIterator(1, 4)  # 이터레이터 생성
print(next(it))  # '1' 출력
print(next(it))  # '2' 출력
print(next(it))  # '3' 출력


2. for 루프를 사용하여 이터레이터의 모든 원소를 순회할 수도 있습니다. 이 때 StopIteration 예외는 자동으로 처리되므로 별도로 처리할 필요가 없습니다.

▼ 예제 코드

for i in MyIterator(1, 4):
    print(i)

# 출력
# 1
# 2
# 3


3. 파이썬의 많은 내장 자료형은 이미 이터레이터 프로토콜을 구현하고 있습니다. 리스트, 튜플, 문자열 등은 모두 이터레이터로 사용할 수 있습니다.

▼ 예제 코드

for i in [1, 2, 3]:  # 리스트
    print(i)
# 1
# 2
# 3

for t in (1, 2, 3):  # 튜플
    print(t)
# 1
# 2
# 3

for ch in "BlueShare":  # 문자열
    print(ch)
# h
# e
# l
# l
# o


☞ 이터레이터는 파이썬의 핵심적인 개념 중 하나입니다. 특히 큰 데이터를 다루는 데 있어 이터레이터는 메모리 효율성을 높일 수 있는 중요한 도구입니다.

참고 자료

함께 보면 좋은 이전 게시글

위로 스크롤