오늘은 파이썬에서 매우 중요한 개념 중 하나인 이터러블과 이터레이터에 대하여 알아보도록 하겠습니다.
1. 이터러블(iterable)
이터러블은 for 루프 등에서 반복 가능한 객체를 말합니다. 리스트(list), 튜플(tuple), 문자열(str), 딕셔너리(dict), 세트(set) 등의 컨테이너 데이터 타입은 모두 이터러블입니다. 이터러블은 내부적으로 __iter__() 메서드를 구현하여 이터레이터(iterator)를 반환합니다. for 루프 등에서 사용하거나, iter() 함수를 사용하여 이터레이터로 변환할 수 있습니다.
2. 이터레이터(iterator)
이터레이터는 이터러블에서 각 항목에 접근하는 방법을 제공하는 객체입니다. 이터레이터는 __iter__()와 __next__() 메서드를 구현하여 이터러블의 각 항목에 순차적으로 접근합니다. iter() 함수를 사용하여 이터러블을 이터레이터로 변환할 수 있습니다. next() 함수를 사용하여 이터레이터에서 다음 항목을 가져올 수 있습니다. 이터레이터는 각 항목을 가져오는 도중에 내부 상태를 유지하므로, 한 번 순회를 마친 이후에는 처음으로 되돌아가서 다시 순회할 수 없습니다.
이터러블 객체는 다음과 같은 종류가 있습니다.
리스트 (List), 튜플 (Tuple), 문자열 (String), 딕셔너리 (Dictionary)등...
반복 가능한 객체들은 내부적으로 '__iter__() ' 메서드를 구현하고 있는 객체들입니다.
iterable 객체에 iter() 함수를 호출하면 iterator가 됩니다. iterator가 되면 next() 또는 __next__ 메서드를 사용할 수 있으며, 다음 요소에 접근이 가능합니다. 만약, 모든 요소를 반환했으면 stopIteration 에러가 발생합니다. 또한 iterable 객체를 iterator로 바꾸지 않고, 내장함수 next()를 사용하면 이 객체는 iterator가 아니라는 오류가 발생합니다.
iterator는 모든 동작을 완료한 후 결과를 한꺼번에 메모리에 적재시킵니다. 우리가 for문을 사용할 때는 iterable 객체를 그대로 사용하는데, 그 이유는 for문의 내부에서 자체적으로 iterable 객체를 iterator로 만들어주기 때문입니다. 즉, 아래와 같이 for문을 실행하면 자동으로 iter(obj)을 실행해 iterator를 생성합니다.
for 문 내부 과정 예시
# iterable 객체로부터 이터레이터 객체 생성
iter_obj = iter(iterable)
# 무한 루프
while True:
try:
# 다음 요소를 가져옴
element = next(iter_obj)
# 요소에 대한 처리를 수행
# (여기서는 단순히 출력만 하겠습니다)
print(element)
except StopIteration:
# StopIteration이 발생하면 루프에서 빠져나옴
break
'파이썬(python) 기본' 카테고리의 다른 글
파이썬 기초: 모듈과 패키지 개념 (0) | 2023.08.07 |
---|---|
파이썬 효율적인 데이터 처리 : 제너레이터(generator)이란? 제너레이터 표현식 (0) | 2023.08.02 |
파이썬 객체 지향 프로그래밍: 클래스(Class) 생성자와 인스턴스 변수 (0) | 2023.07.28 |
파이썬 함수 4편: *args, **kwargs , 가변 인자 처리 방법 (0) | 2023.07.25 |
파이썬 함수 3편: 데코레이터(decorator) 정의 및 사용법 (0) | 2023.07.25 |