파이썬 이터레이터(Iterator) 이해하기: 개념과 사용 예제
파이썬의 이터레이터는 자료형의 원소를 차례대로 접근하는 방식을 제공합니다. 이번 글에서는 이터레이터가 무엇인지, 그리고 파이썬에서 어떻게 사용하는지 대해 알아보겠습니다.
▼ 목차
- 이터레이터의 정의
- 이터레이터의 필요성
- 파이썬에서의 이터레이터 사용법
- 이터레이터 만드는 방법
- 이터레이터 사용 예제
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
☞ 이터레이터는 파이썬의 핵심적인 개념 중 하나입니다. 특히 큰 데이터를 다루는 데 있어 이터레이터는 메모리 효율성을 높일 수 있는 중요한 도구입니다.
참고 자료
- 파이썬 공식 문서 – 이터레이터: https://docs.python.org/3/tutorial/classes.html#iterators
- Real Python – 파이썬 이터레이터와 이터러블: https://realpython.com/python-itertools/
함께 보면 좋은 이전 게시글
- 파이썬 for문: break, continue, range 함수, 리스트 컴프리헨션 사용법
- 파이썬 itertools 라이브러리: 순열, 조합 및 고급 반복 도구 활용하기
- 파이썬 함수 사용법: 매개변수와 인수, 람다 함수
- 파이썬 클로저(Closure): 정의, 사용 이유, 예제를 통한 이해
- 파이썬 functools 라이브러리: reduce, partial 함수의 활용
이 글이 도움이 되셨다면 공유를 부탁 드립니다. 다음 글에서 뵙겠습니다!