Design Pattern

Observer Pattern

eddie0329 2020. 10. 19. 17:37
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ๋ชฉ์ฐจ

  • Introduction
  • What is Observer Pattern?
  • Implementation
  • Conclusion
  • Reference

๐Ÿ“Œ Introduction

์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Observer Pattern์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ What is Observer Pattern?

์˜ต์ €๋ฒ„ ํŒจํ„ด์€ ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐ ํ•˜๋Š” ๊ด€์ฐฐ์ž๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์žˆ์„๋•Œ noti๋ฅผ ์ฃผ๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ Implementation

๋จผ์ € subjectํด๋ž˜์Šค๋ฅผ ์ •์˜ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

class Subject {
  constructor() {
    this.observers = [];
    return this;
  }
  addObserver(observer) {
    this.observers.push(observer);
    return this;
  }
  removeObserver(observer) {
    this.observers = this.observers.filter((ob) => ob !== observer);
    return this;
  }
  notifyObservers(data) {
    this.observers.forEach((observer) => {
      observer.notify(data);
    });
  }
}

๊ฐ„๋‹จํ•˜๊ฒŒ observer์˜ ๋ชฉ๋ก์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ์ง€์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  notifyObservers๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ observer๋“ค์—๊ฒŒ noti๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const subject = new Subject();
const observer1 = { notify: (data) => console.log(`First: ${data}`) };
const observer2 = { notify: (data) => console.log(`Second: ${data}`) };

subject.addObserver(observer1);
subject.addObserver(observer2);
subject.notifyObservers("HELLO");

// RESULT:
// First: HELLO
// Second: HELLO

์ด๋ ‡๊ฒŒ ํ•ด๋‹น observer๋“ค์—๊ฒŒ notify๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ Conclusion

Observer ํŒจํ„ด์€ pusher์™€ ๊ฐ™์€ ์‹ค์‹œ๊ฐ„์„ ์ค‘์š”์‹œ ํ•˜๋Š” ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ๋งŽ์€ ๊ด€๋ฆฌ ๊ถŒํ•œ์„ ๋ถ€์—ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํšŒ์‚ฌ์—์„œ ์“ฐ๋Š” pusher๋ฅผ Observer ํŒจํ„ด์œผ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์„œ ์‰ฝ๊ฒŒ vuex์˜ ๊ฐ’๋“ค์„ ์ •ํ•ด ์ฃผ๊ณค ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Reference

๋ฐ˜์‘ํ˜•