파이썬 - 이터러블(iterable) 객체와 “iter” 완전 정복

1 분 소요

파이썬 이터러블(iterable) 객체와 __iter__ 완전 정복

프로그래밍을 하다 보면 for 문이나 in 연산자를 자주 사용하게 된다. 그런데 이게 작동하는 핵심 원리가 바로 **이터러블(iterable)**이다. 파이썬은 반복을 매우 강력하고 유연하게 지원하는 언어이고, 그 중심에 있는 개념이 이터러블__iter__ 메서드다.

이 글에서는 이터러블 객체가 무엇인지, __iter__는 어떤 역할을 하는지 개념부터 예제까지 정리해본다.


1. 이터러블 객체란?

**이터러블(iterable)**은 말 그대로 반복할 수 있는 객체를 뜻한다. 즉, for 문으로 순회할 수 있는 객체는 모두 iterable이다.

대표적인 이터러블 예시:

[1, 2, 3]       # 리스트
"hello"         # 문자열
(1, 2, 3)       # 튜플
{"a": 1}        # 딕셔너리
{1, 2, 3}       # 집합

이런 객체들은 내부적으로 __iter__()라는 메서드를 가지고 있어, 반복 가능한 객체가 된다.


2. 반복의 실제 동작 원리

for x in [1, 2, 3]:
    print(x)

이 코드는 내부적으로 다음과 같이 동작한다:

it = iter([1, 2, 3])  # 리스트의 __iter__() 호출 → 반복자(iterator) 반환
print(next(it))       # 1
print(next(it))       # 2
print(next(it))       # 3

즉, iter() 함수는 __iter__() 메서드를 호출하고, next() 함수는 __next__() 메서드를 호출해서 값을 하나씩 꺼내는 것이다.


3. iterable vs iterator

구분 iterable (이터러블) iterator (이터레이터)
정의 반복 가능한 객체 next()로 값을 하나씩 꺼낼 수 있음
필수 메서드 __iter__() __iter__(), __next__()
예시 리스트, 문자열, 딕셔너리 등 iter(리스트), iter(문자열)

이터러블은 반복자를 생성할 수 있는 객체, 이터레이터는 직접 next()를 호출해 값을 꺼내는 객체라고 이해하면 된다.


4. __iter__() 메서드란?

__iter__()는 이터러블 객체가 **반복자(iterator)**를 반환하는 메서드다. 이 메서드는 for문이나 iter() 함수가 호출될 때 자동으로 실행된다.


5. 커스텀 이터러블 객체 만들기

직접 __iter____next__를 구현해서 반복 가능한 객체를 만들 수 있다.

class MyRange:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __iter__(self):
        return self

    def __next__(self):
        if self.current >= self.end:
            raise StopIteration
        val = self.current
        self.current += 1
        return val

for i in MyRange(1, 4):
    print(i)

출력:

1
2
3

6. 이터러블인지 확인하는 방법

from collections.abc import Iterable

print(isinstance([1, 2, 3], Iterable))  # True
print(isinstance(123, Iterable))        # False

collections.abc.Iterable 클래스를 사용하면 어떤 객체가 이터러블인지 확인할 수 있다.


마무리 정리

  • 이터러블: __iter__() 메서드를 가진, 반복 가능한 객체
  • 이터레이터: __iter__()__next__()를 모두 가진 객체
  • for, in, next() 같은 문법은 내부적으로 이 메서드들을 호출해 동작한다
  • 파이썬은 반복 구조가 유연하고 강력하며, 커스텀 객체도 쉽게 이터러블로 만들 수 있다

댓글남기기