파이썬에서는 반복자 패턴과 순회 인터페이스를 사용하여 컬렉션의 항목을 반복하고 처리하는 것이 매우 간편해집니다. 이러한 패턴과 인터페이스를 사용하면 코드를 간결하게 유지할 수 있고, 컬렉션에 대한 작업을 일관된 방식으로 수행할 수 있습니다.
반복자 패턴 (Iterator Pattern)
반복자 패턴은 컬렉션의 내부 구조에 상관없이 항목을 반복할 수 있는 방법을 제공합니다. 이 패턴은 컬렉션과 이를 반복하는 객체, 즉 반복자(iterator)를 분리하여 구현합니다. 이를 통해 컬렉션의 내부 구현을 수정하지 않고도 항목을 반복할 수 있습니다.
반복자 인터페이스
파이썬에서는 Iterator
클래스를 구현하여 반복자 인터페이스를 정의합니다. 이 인터페이스에는 __iter__
와 __next__
메서드가 있습니다. __iter__
메서드는 반복자 객체 자체를 반환하고, __next__
메서드는 다음 항목을 반환합니다.
class Iterator:
def __iter__(self):
return self
def __next__(self):
# 다음 항목 반환 로직 작성
pass
사용 예시
아래는 Iterator
클래스를 사용하여 리스트의 항목을 반복하는 예시입니다.
class ListIterator(Iterator):
def __init__(self, lst):
self.lst = lst
self.index = 0
def __next__(self):
if self.index < len(self.lst):
item = self.lst[self.index]
self.index += 1
return item
else:
raise StopIteration
my_list = [1, 2, 3, 4, 5]
iter_obj = ListIterator(my_list)
for item in iter_obj:
print(item)
위 코드는 my_list
라는 리스트의 항목을 반복하여 출력하는 예시입니다. ListIterator
는 Iterator
클래스를 상속받아 __next__
메서드를 구현한 것으로, for
루프에서 자동으로 반복자 객체를 생성하고 __next__
메서드를 호출합니다.
순회 인터페이스 (Iterable Interface)
파이썬에서는 순회 가능한 객체를 생성하기 위해 순회 인터페이스를 사용합니다. 이 인터페이스는 Iterable
클래스를 구현하여 정의되며, __iter__
메서드를 포함해야 합니다. __iter__
메서드는 반복자 객체를 반환합니다.
사용 예시
아래는 순회 인터페이스를 사용하여 사용자 정의 클래스를 순회 가능한 객체로 만드는 예시입니다.
class MyCollection:
def __init__(self):
self.data = [1, 2, 3, 4, 5]
def __iter__(self):
return ListIterator(self.data)
my_collection = MyCollection()
for item in my_collection:
print(item)
위 코드는 MyCollection
클래스를 순회 가능한 객체로 만듭니다. __iter__
메서드에서는 ListIterator
객체를 반환하여 반복을 가능하게 합니다. for
루프에서는 __iter__
메서드를 호출하여 반복자 객체를 얻은 후 __next__
메서드를 호출하며, 리스트의 항목을 출력합니다.
정리
반복자 패턴과 순회 인터페이스를 사용하면 파이썬에서 컬렉션의 항목을 간편하게 반복하고 처리할 수 있습니다. 이를 통해 코드의 가독성과 유지 보수성을 향상시킬 수 있으며, 일관된 방식으로 컬렉션에 대한 작업을 수행할 수 있습니다.