[파이썬] 반복자 패턴과 순회 인터페이스

파이썬에서는 반복자 패턴과 순회 인터페이스를 사용하여 컬렉션의 항목을 반복하고 처리하는 것이 매우 간편해집니다. 이러한 패턴과 인터페이스를 사용하면 코드를 간결하게 유지할 수 있고, 컬렉션에 대한 작업을 일관된 방식으로 수행할 수 있습니다.

반복자 패턴 (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라는 리스트의 항목을 반복하여 출력하는 예시입니다. ListIteratorIterator 클래스를 상속받아 __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__ 메서드를 호출하며, 리스트의 항목을 출력합니다.

정리

반복자 패턴과 순회 인터페이스를 사용하면 파이썬에서 컬렉션의 항목을 간편하게 반복하고 처리할 수 있습니다. 이를 통해 코드의 가독성과 유지 보수성을 향상시킬 수 있으며, 일관된 방식으로 컬렉션에 대한 작업을 수행할 수 있습니다.