Files
python-examples/doc/11_iterator.md
2025-01-23 11:02:27 +09:00

46 lines
2.5 KiB
Markdown

# 이터레이터와 제너레이터
파이썬에서 이터레이터(iterator)와 제너레이터(generator)는 시퀀스(sequence) 데이터를 순차적으로 처리하는 데 사용되는 중요한 개념입니다. 이 둘은 서로 밀접한 관련이 있지만, 각각 다른 특징과 용도를 가지고 있습니다.
## 이터레이터(Iterator)
**이터레이터(Iterator)**는 순서대로 다음 값을 반환할 수 있는 객체를 의미합니다. 이터레이터는 `__next__()` 메서드를 가지는 객체로, 이 메서드를 호출할 때마다 다음 값을 순차적으로 반환합니다. 파이썬에서 리스트, 튜플, 문자열 등 많은 자료형들이 이터레이터를 지원하여 for 문과 같은 반복문에서 사용될 수 있습니다.
* 순차적 접근: 다음 값을 요청할 때마다 현재 위치에서 한 칸씩 이동하며 값을 반환합니다.
* 상태 유지: 이전에 반환한 값을 기억하여 다음 값을 반환할 때 사용합니다.
* `__next__()` 메서드: 다음 값을 반환하는 메서드입니다. 모든 값을 반환하고 더 이상 값이 없을 때 StopIteration 예외를 발생시킵니다.
* `iter()` 함수: 이터러블 객체를 이터레이터로 변환합니다.
```python
my_list = [1, 2, 3]
my_iter = iter(my_list)
print(next(my_iter)) # 1
print(next(my_iter)) # 2
print(next(my_iter)) # 3
print(next(my_iter)) # StopIteration 예외 발생
```
### 이터러블(Iterable)
for 문에서 사용될 수 있는 객체를 의미합니다. 리스트, 튜플, 문자열 등이 대표적인 예입니다.
모든 이터러블은 이터레이터로 변환될 수 있습니다.
## 제너레이터(Generator)
제너레이터는 이터레이터를 생성하는 함수입니다. yield 키워드를 사용하여 값을 반환하고, 함수의 실행을 일시 중단합니다. 다음 번에 함수를 호출하면 이전에 중단된 지점부터 다시 실행됩니다.
* 메모리 효율적: 필요한 값만 메모리에 로드하기 때문에 대용량 데이터 처리에 유용합니다.
* 간결한 코드: yield 키워드를 사용하여 간결하게 이터레이터를 구현할 수 있습니다.
* 코루틴과 연동: 비동기 프로그래밍에서 코루틴과 함께 사용될 수 있습니다.
```python
def my_generator():
for i in range(5):
yield i
for num in my_generator():
print(num)
```
이터레이터는 이미 존재하는 데이터를 순회하는 도구이고, 제너레이터는 데이터를 생성하는 도구라고 할 수 있습니다.