🔥 이터러블과 이터레이터

476자
7분

이 장에서는 파이썬의 이터러블(iterable)과 이터레이터(iterator)에 대해 자세히 알아보겠습니다. 이 두 가지 개념은 파이썬에서 데이터를 반복하고 처리하는 핵심적인 역할을 합니다. 이 개념을 쉽게 이해하기 위해 다양한 예제와 함께 설명하겠습니다.

이터러블(iterable)과 이터레이터(iterator) 이해하기

이터러블(iterable)이란?

이터러블은 반복 가능한 객체로, 여러 개의 요소를 가지고 있고 이를 반복해서 순회할 수 있는 객체를 의미합니다. 파이썬에서는 리스트, 튜플, 문자열, 집합 등이 이터러블 객체입니다. 이터러블은 for 반복문에서 사용되며, 각 요소를 차례대로 처리하는 데 유용합니다.

이터레이터(iterator)란?

이터레이터는 이터러블 객체의 요소를 하나씩 반환하는 객체입니다. 이터레이터는 iter() 함수로 생성하며, next() 함수로 다음 요소를 가져올 수 있습니다. 이터레이터는 이터러블의 내부 상태를 유지하고, 요소를 순차적으로 제공하는 역할을 합니다.

이터러블(iterable)과 이터레이터(iterator) 예제

리스트를 이터러블로 활용하기

리스트는 가장 일반적인 이터러블 객체 중 하나입니다. 다음은 리스트를 이터러블로 활용하는 예제입니다.

numbers = [1, 2, 3, 4, 5]
 
# 리스트를 이터레이터로 변환
iter_numbers = iter(numbers)
 
# 이터레이터를 사용하여 요소 출력
print(next(iter_numbers))  # 1
print(next(iter_numbers))  # 2
 
python

문자열을 이터러블로 활용하기

문자열 역시 이터러블 객체로 활용할 수 있습니다.

text = "Hello, Python"
 
# 문자열을 이터레이터로 변환
iter_text = iter(text)
 
# 이터레이터를 사용하여 문자 출력
print(next(iter_text))  # 'H'
print(next(iter_text))  # 'e'
 
python

이터러블과 이터레이터의 관계

이터러블과 이터레이터는 밀접한 관계를 가지고 있습니다. 이터러블 객체는 iter() 함수를 통해 이터레이터 객체로 변환됩니다.

numbers = [1, 2, 3]
 
# 리스트를 이터레이터로 변환
iter_numbers = iter(numbers)
 
python

for 반복문과 이터러블

for 반복문은 이터러블 객체를 순회하면서 요소를 처리합니다. 이터러블 객체에 대해 iter() 함수를 호출하고, 내부적으로 이터레이터 객체를 사용하여 요소를 하나씩 가져옵니다.

numbers = [1, 2, 3]
 
# for 반복문을 사용하여 리스트 순회
for num in numbers:
    print(num)
 
python

StopIteration 예외

이터레이터는 모든 요소를 순회한 후에는 StopIteration 예외를 발생시킵니다. 이를 이용하여 반복을 종료할 수 있습니다.

numbers = [1, 2, 3]
 
iter_numbers = iter(numbers)
 
try:
    while True:
        num = next(iter_numbers)
        print(num)
except StopIteration:
    pass
 
python

사용자 정의 이터러블

사용자는 자신만의 이터러블 객체와 이터레이터를 만들 수 있습니다. 클래스 내에 __iter__()__next__() 메서드를 정의하여 이터레이터를 구현할 수 있습니다.

class MyIterable:
    def __init__(self, start, end):
        self.start = start
        self.end = end
 
    def __iter__(self):
        return self
 
    def __next__(self):
        if self.start > self.end:
            raise StopIteration
        self.start += 1
        return self.start - 1
 
my_iterable = MyIterable(1, 5)
 
for num in my_iterable:
    print(num)
 
python

이터러블과 이터레이터 활용

파일 읽기와 이터러블

텍스트 파일을 한 줄씩 읽어오는 과정에서 이터러블과 이터레이터가 활용됩니다. 파일 객체는 이터러블이며, readline() 메서드를 사용하여 이터레이터 역할을 수행합니다.

with open("example.txt", "r") as file:
    for line in file:
        print(line)
 
python

제너레이터(generator)를 이터레이터로 활용

제너레이터는 함수 내부에서 yield 키워드를 사용하여 값을 생성하는 객체입니다. 제너레이터는 이터러블과 이터레이터의 역할을 동시에 수행합니다.

def count_up_to(n):
    i = 1
    while i <= n:
        yield i
        i += 1
 
counter = count_up_to(5)
 
for num in counter:
    print(num)
 
python

연습문제

  1. 1부터 100까지의 숫자 중 짝수만 출력하는 프로그램을 작성하세요. (이터레이터 활용)
  2. 사용자로부터 정수를 입력받아, 해당 숫자부터 1까지 역순으로 출력하는 프로그램을 작성하세요. (이터러블 활용)
  3. 사용자로부터 단어를 입력받아, 각 문자를 역순으로 출력하는 프로그램을 작성하세요. (제너레이터 활용)