# 이터레이터와 제너레이터 파이썬에서 이터레이터(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) ``` 이터레이터는 이미 존재하는 데이터를 순회하는 도구이고, 제너레이터는 데이터를 생성하는 도구라고 할 수 있습니다.