일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- GCM
- git
- php
- GCM 번역
- 푸시 번역
- 카프카 트랜잭션
- APNS
- Design Pattern
- 푸시
- nginx
- JPA
- 자바스크립트
- nginx설치
- 페이스북 번역
- 카프카
- Push
- 웹사이트성능
- nginx설정
- 성능
- 웹사이트최적화기법
- NoSQL
- 디자인패턴
- 레디스
- gcm 푸시 번역
- redis
- kafka
- Java
- 웹사이트 성능
- notification
Archives
- Today
- Total
간단한 개발관련 내용
Observer Pattern 본문
Computer Science/Architechture & Design Patterns
Observer Pattern
vincenzo.dev.82 2015. 12. 4. 01:01반응형
1. 정의.
의도
- 객체 사이에 일 대 다의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지받고 자동으로 갱신될 수 있게 만듭니다.
위키피디아
- 옵서버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다.
해드퍼스트
- 옵저버 패턴에서는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one to many) 의존성을 정의합니다.
2. 동기
- 클래스들 사이의 결합성을 낮추기위해(loosely coupled), 게시(publish)-구독(subscribe)과 같은 종류의 관계에 대해서 주체(subject) 와 감시자(observer) 의 형태로 나누어 객체의 상호작용을 표현하기 위함.
3. 활용성
- 두 가지 형태를 갖는 객체의 상호작용 안에서 어떤 변경에 대해 통보를 받고 변경 되거나 이러한 변경에 대해 다른 객체들이 통보를 받아야 할 때.
4. 참여자
- subject, observer, concreteSubject, concreteObserver
5. 협력방법
- ConcreteSubject 는 Observer의 상태와 자신의 상태가 달라지는 변경이 발생할 때마다 감시자에게 통보합니다.
- subject 의 notify 동작을 통해 등록된 observer 들의 상태를 갱신하도록 합니다.
6. 결과
- Observer 패턴을 사용하게 되면 주체 및 감시자 모두를 독립적으로 변형하기 쉽습니다.
—Subject 와 Observer 클래스 간에는 추상적인 결합도만이 존재합니다.
— 브로드캐스트 방식의 교류를 가능하게 합니다.
— 예측하지 못한 정보를 갱신합니다.
7. 구현 (고려해야 될 부분)
- Subject 와 그것의 Observer들을 대응시킵니다.
- 하나 이상의 Subject를 감시합니다.
- 누가 Notify 를 촉발시킬 것인가.
- 삭제한 Subject에 대한 Dangling Reference 를 계속 유지할 때가 있습니다.
- 통보 전에 주체의 상태가 자체 일관성을 갖추도록 만들어져야 합니다.
- Observer 별 갱신 프로토콜을 피합니다.(Push Model / Pull Model)
- 자신이 관심있는 변경이 무엇인지 명확하게 지정합니다.
- 복잡한 갱신의 의미 구조를 캡슐화 합니다.
- Subject 와 Observer 클래스를 합칩니다.
8. Diagram
반응형