반응형
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




반응형

+ Recent posts