Iterator란 무엇인가?
Python에서 iterator는 순차적으로 데이터를 탐색할 수 있는 객체입니다. 반복 가능한(iterable) 객체에서 항목을 하나씩 꺼낼 수 있도록 하는 구조로, 리스트, 튜플, 문자열 등 반복 가능한 모든 자료형에서 iterator를 생성할 수 있습니다. Iterator는 __iter__()와 __next__()라는 두 가지 기본 메서드를 사용하여 작동합니다. for 루프문을 사용할 때 iterator가 내부적으로 사용된다고 보시면 됩니다.
Iterator의 작동 방식
Iterator 객체는 __iter__() 메서드를 통해 초기화되고, __next__() 메서드를 통해 항목을 순차적으로 반환합니다. 이때 __next__() 메서드가 호출될 때마다 다음 항목이 반환되며, 더 이상 반환할 항목이 없으면 StopIteration 예외가 발생해 반복이 종료됩니다.
Python에서 for 루프를 사용하면 이 과정이 자동으로 처리되어, __next__() 메서드를 명시적으로 호출할 필요 없이 손쉽게 반복 작업을 수행할 수 있습니다.
예제: 간단한 Iterator
다음은 리스트를 직접 iterator로 변환하여 사용하는 간단한 예제입니다:
# 리스트 생성
sample_list = [1, 2, 3]
# 리스트에서 iterator 생성
iterator = iter(sample_list)
# iterator에서 항목 하나씩 꺼내기
print(next(iterator)) # 출력: 1
print(next(iterator)) # 출력: 2
print(next(iterator)) # 출력: 3
위 코드에서 iter() 함수를 사용하여 sample_list의 iterator를 생성하고, next() 함수를 통해 항목을 하나씩 출력할 수 있습니다.
사용자 정의 Iterator
Iterator의 개념을 이해하려면 직접 Iterator 객체를 만들어보는 것도 좋은 방법입니다. 아래는 1부터 n까지 숫자를 반환하는 사용자 정의 iterator 예제입니다:
class NumberIterator:
def __init__(self, n):
self.n = n
self.current = 1
def __iter__(self):
return self
def __next__(self):
if self.current <= self.n:
result = self.current
self.current += 1
return result
else:
raise StopIteration
# 1부터 5까지 숫자를 반복하는 iterator
for number in NumberIterator(5):
print(number)
이 예제에서 NumberIterator 클래스는 __iter__()와 __next__() 메서드를 정의하여 iterator로서 기능합니다. for 루프에서 자동으로 iterator의 __next__()가 호출되어 current 값이 n 이하일 때 하나씩 반환하며, 반복이 끝나면 StopIteration을 발생시킵니다.
Iterator는 Python에서 매우 중요한 개념으로, 데이터를 하나씩 처리할 때 메모리를 절약하고 반복 작업을 간단하게 수행할 수 있습니다. for 루프와 같은 반복 구문에서 손쉽게 사용할 수 있으며, 사용자 정의 iterator를 통해 반복의 동작을 직접 정의할 수도 있습니다. Python의 iterator는 데이터 탐색을 효율적이고 직관적으로 수행할 수 있는 강력한 도구입니다.