요약

  • 상태 변경을 실시간으로 알릴 수 있는 패턴

Observer 패턴이란

  • subject (관찰 대상), observer (관찰자)가 존재
  • 관찰대상의 상태가 변경 된 경우 관찰자의 메소드를 호출 함으로써 상태 변경을 알려주는 패턴

로직

  • observer가 subject에 observer 리스트에 상태 변경 시 실행될 메소드를 등록한다 (observer 자체를 등록한 후 notify 시 해당 observer의 특정한 함수를 실행해도 된다)
  • subject에서 상태가 변경된 후 observer 리스트에 등록된 모든 observer의 메소드를 호출해 상태 변경을 알린다

예시

function Subject() {
  this.observers = []; // observer list

  this.registerObserver = function (observerMethod) {
    this.observers.push(observerMethod);
  };

  this.unregisterObserver = function (observerMethod) {
    this.observers = this.observers.filter(
      (registeredObserverMethod) => registeredObserverMethod !== observerMethod,
    );
  };

  this.notifyObservers = function (data) {
    this.observers.forEach((observer) => observer(data));
  };
}

  • 옵저버 패턴을 응용한 패턴으로 pub/sub 패턴이 있는데 이 부분은 나중에 알아봐야겠다

😊