[python] 옵저버 디자인 패턴

옵저버 디자인 패턴은 소프트웨어 개발에서 유용하게 사용되는 디자인 패턴 중 하나입니다. 이 패턴은 객체간의 일대다 의존성 관계를 정의하여, 하나의 객체의 상태가 변경될 때, 의존하는 다른 객체들에게 자동으로 알림을 보낼 수 있는 기능을 제공합니다. 이로써 객체들 간의 결합도를 느슨하게 유지할 수 있으며, 확장 가능하고 재사용 가능한 코드를 작성할 수 있습니다.

패턴 구성 요소

옵저버 디자인 패턴은 다음과 같은 구성 요소로 이루어져 있습니다:

예제 코드

# 주체 클래스
class Subject:
    def __init__(self):
        self.observers = []
        self.state = None

    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(self.state)

    def set_state(self, state):
        self.state = state
        self.notify()


# 옵저버 클래스
class Observer:
    def update(self, state):
        pass


# 구체적인 주체 클래스
class ConcreteSubject(Subject):
    def __init__(self):
        super().__init__()


# 구체적인 옵저버 클래스
class ConcreteObserver(Observer):
    def update(self, state):
        print("Received new state:", state)


# 사용 예시
subject = ConcreteSubject()

observer1 = ConcreteObserver()
observer2 = ConcreteObserver()
observer3 = ConcreteObserver()

subject.attach(observer1)
subject.attach(observer2)

subject.set_state("State 1")  # 출력: Received new state: State 1

subject.detach(observer2)
subject.attach(observer3)

subject.set_state("State 2")  # 출력: Received new state: State 2, Received new state: State 2

결론

옵저버 디자인 패턴은 객체간의 의존성 관계를 효과적으로 관리하고, 느슨한 결합을 유지할 수 있는 방법 중 하나입니다. 이를 통해 애플리케이션의 유연성과 확장성을 높일 수 있으며, 재사용 가능한 코드를 작성할 수 있습니다. 사용 예시를 통해 옵저버 디자인 패턴의 기본 개념과 구현 방법을 이해할 수 있습니다.

참고 자료