[python] 옵저버 패턴

옵저버 패턴은 객체들 간의 일대다(many-to-many) 관계를 정의하는 디자인 패턴이다. 이 패턴은 주체(subject)와 옵저버(observer)라는 두 가지 주요 요소로 구성되어 있다.

패턴 구성 요소

예제 코드

class Subject:
    def __init__(self):
        self.observers = []

    def attach(self, observer):
        self.observers.append(observer)

    def detach(self, observer):
        self.observers.remove(observer)

    def notify(self):
        for observer in self.observers:
            observer.update()

class Observer:
    def __init__(self, name):
        self.name = name

    def update(self):
        print(f"{self.name} received notification")

# 주체 객체 생성
subject = Subject()

# 옵저버 객체 생성
observer1 = Observer("Observer 1")
observer2 = Observer("Observer 2")
observer3 = Observer("Observer 3")

# 옵저버 등록
subject.attach(observer1)
subject.attach(observer2)
subject.attach(observer3)

# 주체 객체의 상태 변경 알림
subject.notify()

# 출력:
# Observer 1 received notification
# Observer 2 received notification
# Observer 3 received notification

위의 예제 코드에서는 주체(Subject)와 옵저버(Observer)를 간단히 구현하였다. 주체는 옵저버들의 리스트를 관리하고, 옵저버에게 변경 사항을 알리는 역할을 한다. 옵저버는 주체에서 전달된 알림을 받아서 적절한 동작을 수행한다.

이 예제에서는 주체가 상태 변경을 알리는 notify 메서드를 호출하면, 등록된 모든 옵저버들이 알림을 받게 된다.

활용 예시

옵저버 패턴은 다양한 상황에서 활용될 수 있다. 예를 들어, 주식 시장에서 주가가 변동할 때, 주식 투자자들은 실시간으로 주식 가격 변동을 관찰하고자 할 수 있다. 이때, 주식 시장은 주식 투자자들을 옵저버로 등록하고, 주가 변동이 발생하면 등록된 옵저버들에게 알림을 전송하여 실시간으로 주식 가격 변동을 감지하도록 할 수 있다.

결론

옵저버 패턴은 객체 간의 관계를 유연하게 구성하여 상태나 데이터 변경을 감지하고 알림을 전송하는 디자인 패턴이다. 이 패턴을 활용하면 객체들 간의 결합도를 낮추고 유지보수성을 향상시킬 수 있다.