[TIL] 2020-03-18

eunbi·2020년 3월 28일
0

TIL

목록 보기
8/45

3월 18일 수요일

observer패턴을 공부하며 구독과 발행의 개념에 대해서 새롭게 알게 되었다. 와.. 코드는 이렇게 구현하는 것이구나.. 많은것을 느꼇던 하루였다. 그냥 기능을 구현하기 급급했던 내가 한층 성장할 수 있었던 공부였다.

오늘 한 일

  • observer 공부
  • 자판기 미션 기능 보완

Observer pattern의 목적은?

  • 모듈간의 의존성을 낮게 하려는 것

  • A,B,C 모듈이 있다고 하자.
    A모듈에서는 어떠한 경우에 '데이터추가' 라는 이벤트가 발생한다.
    B와 C는 '데이터추가' 이벤트가 발생하면 본인들의 어떤 상태(state)를 변경해줘야 한다. 따라서 B와 C는 '데이터추가' 라는 이벤트를 주시해야 하는 입장이다. 하지만 언제 '데이터추가'이벤트가 발생할지는 모른다. 따라서 B와 C는 '데이터추가' 이벤트를 구독하는 것이 좋은 방법이다.

  • 여기서 주의할 점은, '데이터추가'를 구독하는 것이지 'A의 데이터추가'를 구독하는 것이 아니라는 점이다.
    실제로 B와 C의 관심은 누가 발생시킨 이벤트인가?' 가 아니고, '어떤 이벤트가 발생했는가? 이다.

Observer pattern은 어떻게 구현할까?

  • 구독방법을 포함한다.
  • 구독리스트를 담아야 한다.
  • 이벤트를 발행하는 방법을 포함한다.
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));
    }
}
profile
프론트엔드 개발자입니다 :)

0개의 댓글