옵서버 패턴 : 데이터의 변경 발생했을 때 상대 클래스/객체에 의존 하지 않고 데이터 변경을 통보하고자 할 때 유용함.
▶ 예로, 차량의 연료가 소진될 때 까지 주행 가능 거리 출력하는 클래스, 연료량 부족 경고 메시지 보내는 클래스 등에 연료량의 변화를 통보하는 경우가 있는데, 이럴 때 연료량 클래스는 연료량에 관심 갖는 구체적 클래스(주행 가능 거리 출력, 연료량 부족 경고, 주변 주유소 검색)에 직접 의존하지 않는 방식으로 설계하는 것이 바람직!
옵서버 패턴은 통보 대상 객체의 관리를 Subject 클래스와 Observer인터페이스로 일반화함
▷ 데이터 변경을 통보하는 클래스(ConcreteSubject)는 통보 대상 클래스/객체(ConcreteObserver)에 대한 의존성 없앨 수 O
▷ 옵서버 패턴은, 통보 대상 클래스나 대상 객체의 변경에도 ConcreteSubject 클래스를 수정 없이 그대로 사용할 수 있게 함
- Observer : 데이터의 변경 통보 받는 인터페이스. Subject에선 Observer 인터페이스의 update 메소드 호출함으로써 ConcreteSubject의 데이터 변경을 ConcreteObserver에게 통보함
- Subject : ConcreteObserver 객체 관리하는 요소. Observer 인터페이스 참조해 ConcreteObserver 관리하므로, ConcreteObserver의 변화에 독립적임
- ConcreteSubject : 변경 관리 대상이 되는 데이터가 있는 클래스, 데이터 변경을 위한 메소드인 setState가 있으며, setState에선 자신의 데이터인 subjectState를 변경하고, Subject의 notifyObservers 메소드를 호출해 ConcreteObserver 객체에 변경 통보함
- ConcreteObserver : ConcreteSubject의 변경 통보 받는 클래스. Observer 인터페이스의 update 메소드 구현함으로써 변경 통보 받음. 변경된 데이터는 ConcreteSubject의 getState 메소드 호출함으로써 변경 조회함.
'Study > Design Pattern' 카테고리의 다른 글
| Command Pattern (0) | 2021.11.15 |
|---|---|
| Strategy Pattern (0) | 2021.11.15 |
| 빌더 패턴 (0) | 2021.11.15 |
| 객체지향원리 (0) | 2021.11.15 |