이터러블(Iterable)
'Iterable'은 단어 뜻 그대로 '반복할 수 있는(반복 가능한)' 객체를 뜻한다.
쉽게 말해 for문과 같은 반복문에 넣어서 요소를 하나씩 꺼낼 수 있는 모든 객체를 이터러블이라고 한다.
- 종류 : 리스트(list), 튜플(tuple), 문자열(str), 딕셔너리(dict), 세트(set), 레인지(range) 등
💡이터러블인지 확인하는 방법
객체 내부에 __iter__라는 메서드가 들어있다면 이터러블이다. 이 메서드는 이터레이터를 만들어주는 역할을 한다.
이터레이터(Iterator)
'Iterator'는 이터러블 객체에서 실제로 값을 하나씩 차례대로 꺼내는 '기능을 가진 객체'를 의미한다.
- 특징 : 이터레이터터는 현재 어디까지 값을 꺼냈는지 자기 자신의 '상태(위치)'를 기억하고 있다.
이터러블 객체를 iter() 함수를 사용해서 이터레이터로 바꿀 수 있고, 이터레이터는 next() 함수를 사용해서 다음 값을 출력 할 수 있다. 이때, 더이상 꺼낼 값이 없다면 StopIteration 이라는 에러를 발생시켜 반복을 종료하게 된다.
my_list = [10, 20]
my_iterator = iter(my_list) # iter() 함수로 호출
print(next(my_iterator)) # 출력: 10
print(next(my_iterator)) # 출력: 20
print(next(my_iterator)) # StopIteration 에러 발생(종료)
파이썬의 for문에는 이터레이터를 만들어 next()를 자동으로 호출해주는 매커니즘이 숨어있다.
이터러블은 무조건 순서가 있는걸까?
이터러블이라고 해서 반드시 순서(Sequence)가 정해져 있는 것은 아니다.
- 시퀀스 (Sequence) : 데이터에 인덱스 번호가 붙어있어서 순서를 지정할 수 있는 객체(예: 리스트, 튜플, 문자열)
- 이터러블 (Iterable) : 순서와 상관없이, 안에 담긴 요소들을 하나씩 꺼낼 수 있는 객체(예: 세트, 딕셔너리)
즉, 시퀀스는 이터러블의 한 종류이고, 모든 이터러블이 순서가 정해져 있는것은 아니다.
순서가 없는 이터러블은 '무작위'로 뽑힐까?
순서가 정해져 있지 않은 세트(set)에 이터레이터를 적용하면 무작위(랜덤)으로 값이 튀어나올까 라는 의문이 들었다.
정답은 '무작위로 뽑히지 않는다' 이다.
컴퓨터는 데이터를 메모리에 저장해야 하므로, 사용자 눈에는 순서가 보이지 않더라도 내부적으로 데이터를 배치하는 자신들만의 규칙과 순서를 가진다고 한다. 이터레이터는 바로 이 내부 순서를 따라 차례대로 값을 꺼낸다.
my_set = {"apple", "banana", "melon"}
my_iterator = iter(my_set)
print(next(my_iterator)) # 예: 'banana'
print(next(my_iterator)) # 예: 'apple'
print(next(my_iterator)) # 예: 'melon'
실행 할때마다 결과 순서가 바뀌는 이유는 파이썬이 메모리 효율을 위해 '프로그램(스크립트)을 완전히 새로 켤 때마다 데이터를 메모리에 배치하는 기준 자체를 바꾸기 때문'이다. 한 번 프로그램이 켜져서 실행되는 동안에는 내부 순서가 고정되므로 이터레이터는 늘 같은 순서로 작동한다.
'Python' 카테고리의 다른 글
| 사용자 정의 함수 part2 (0) | 2026.05.28 |
|---|---|
| 사용자 정의 함수 part1 (0) | 2026.05.28 |
| 제어문 - 반복문 (0) | 2026.05.27 |
| 제어문 - 조건문 (1) | 2026.05.27 |
| 컬렉션 타입 (딕셔너리) (0) | 2026.05.26 |