Observer Design Pattern
- 게시, 구독 패턴이라고도 불린다.
- 한 객체(Subject)의 상태게 바뀌면 그 객체가 의존하는 다른 객체들(Observers)한테 연락이 가 자동으로 내용이 갱신되는 방식.
- 일대다(1 : 多) 의존성 관계
구조 다이어그램
+------------------+
| Subject |
+------------------+
| Attach(Observer) |
| Detach(Observer) | +----------------------+
| Notify() -----------| for o in observers { |
+------------------+ | o -> Update() |
| } |
+----------------------+
// - Subject에 여러 Observer를 등록(Attach)해 두고, Notify를 하게 되면
// 루프를 돌면서 각 Observer를 Update하는 패턴이다.
디자인 원칙
- 서로 상호작용하는 객체 사이에는, 가능하면 느슨하게 결합하는 디자인을 사용해야 한다.
1) subject가 Observer객체에 대해 아는 것은 오직 Observer가 특정 Interface를 구현한다는 것 뿐이다.
2) Observer객체의 추가/제거는 언제든지 할 수 있다.
3) Subject와 Observer는 서로 독립적으로 재사용할 수 있다.
장점
- Subject객체와 Observer객체는 서로 독립적이며 결합도가 낮다.
- 어떤 데이터가 바뀔 때마다 작업이 필요한 경우 유용하다.
( React에서는, 서로 연결되진 않았지만 데이터가 동기화 되어 있으면 하는 두 component가 존재할 때 유용하다.)
단점
동일한 작업이 서로 다른 Observer객체에 의해 반복 수행될 수 있다.
도움을 준 정보들
칼럼:
https://www.slideshare.net/dragor0123/observer-pattern-dragor
https://johngrib.github.io/wiki/observer-pattern/
https://delivan.dev/react/programming-patterns-with-react-hooks-kr/
https://www.slideshare.net/joonjhokil/observer-pattern-152125284
'Programming' 카테고리의 다른 글
프론트엔드 개발을 위한 서비스 구조 (Typescript, React, Styled-components, React-query, MobX, React-intl) (0) | 2023.08.15 |
---|---|
[Programming] Non blocking / Blocking (0) | 2020.07.09 |
[Programming] Programming_2 (Functional Programming) (0) | 2020.07.06 |
[Programming] Programming_1 (Object Oriented / Procedural Programming) (0) | 2020.07.06 |
댓글