observer패턴을 공부하며 구독과 발행의 개념에 대해서 새롭게 알게 되었다. 와.. 코드는 이렇게 구현하는 것이구나.. 많은것을 느꼇던 하루였다. 그냥 기능을 구현하기 급급했던 내가 한층 성장할 수 있었던 공부였다.
모듈간의 의존성을 낮게 하려는 것
A,B,C 모듈이 있다고 하자.
A모듈에서는 어떠한 경우에 '데이터추가' 라는 이벤트가 발생한다.
B와 C는 '데이터추가' 이벤트가 발생하면 본인들의 어떤 상태(state)를 변경해줘야 한다. 따라서 B와 C는 '데이터추가' 라는 이벤트를 주시해야 하는 입장이다. 하지만 언제 '데이터추가'이벤트가 발생할지는 모른다. 따라서 B와 C는 '데이터추가' 이벤트를 구독하는 것이 좋은 방법이다.
여기서 주의할 점은, '데이터추가'를 구독하는 것이지 'A의 데이터추가'를 구독하는 것이 아니라는 점이다.
실제로 B와 C의 관심은 누가 발생시킨 이벤트인가?' 가 아니고, '어떤 이벤트가 발생했는가? 이다.
class Observable {
constructor() {
this._observers = new Set();
}
subscribe(observer) {
this._observers.add(observer);
}
unsubscribe(observer) {
this._observers = [...this._observers].filter(subscriber => subscriber !== observer);
}
notify(data) {
this._observers.forEach(observer => observer(data));
}
}