Problems
옵저버(Observer) 패턴이란 주체에 종속된 관찰자(옵저버)들에게 주체가 업데이트 되었음을 자동으로 알리는 디자인 패턴으로 분산 이벤트 처리 시스템을 구현 하는데 사용되고는 한다.
즉, 옵저버는 객체를 지속적으로 관찰하며 업데이트가 있는지를 살펴보는 것이며, 하나의 객체와 그 객체의 상태 변화를 갱신받는 여러 객체들의 일대다 관계(one-to-many relationship)의 디자인 패턴이다.
옵저버 패턴의 특징은 느슨한 결합(Loose Coupling)으로 서로 아는 정보는 적지만, 커뮤니케이션이 가능하다는 것이다.

다이어그램을 살펴보면 대략적으로 어떠한 관계도가 형성되었는지 알 수 있다.
여기서 ConcreteObserver는 실제로 구독을 하는 객체라고 볼 수 있다.
이를 코드로 풀어보자.
from abc import ABCMeta, abstractmethod
class Subject(metaclass=ABCMeta):
@abstractmethod
def register_observer(self):pass
@abstractmethod
def remove_observer(self):pass
@abstractmethod
def notify_observer(self):pass
class Observer(metaclass=ABCMeta):
@abstractmethod
def update(self):pass
class ConcreteSubject(Subject):
def __init__(self):
self.state = ""
self.observer_list = []
def register_observer(self,observer):
self.observer_list.append(observer)
def remove_observer(self,observer):
self.observer_list.remove(observer)
# 옵저버에게 알림 -> 구독하는 옵저버들의 update()실행
def notify_observer(self):
for obs in self.observer_list:
obs.update()
class ConcreteObserver(Observer):
def update(self):
passSource
klee