Observer 패턴은 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 일대다 객체 의존 관계를 구성하는 패턴입니다.
구조
- Observer
- 데이터의 변경을 통보 받는 인터페이스입니다.
- 즉, Subject에서는 Observer 인터페이스의 update 메서드를 호출함으로써 ConcreteSubject의 데이터 변경을 ConcreteObserver에게 통보합니다.
- Subject
- ConcreteObserver 객체를 관리합니다.
- Observer 인터페이스를 참조하여 ConcreteObserver를 관리하므로 ConcreteObserver의 변화에 독립적일 수 있습니다.
- ConcreteSubject
- 변경 관리 대상이 되는 데이터가 있는 클래스입니다.
- 데이터 변경을 위한 메서드인 SetState가 있습니다.
- setState 메서드에서는 자신의 데이터인 subjectState를 변경하고 Subject의 notifyObservers 메서드를 호출해서 ConcreteObserver 객체에 변경을 통보합니다.
- ConcreteObserver
- ConcreteSubject의 변경을 통보 받는 클래스입니다.
- Observer 인터페이스의 update 메서드를 구현함으로써 변경을 통보 받습니다.
- 변경된 데이터는 ConcreteSubject의 getState 메서드를 호출함으로써 변경을 조회합니다.
활용 상황
- 어떤 객체의 상태 변화를 자동으로 알아야 할때 유용합니다.
Observer 패턴의 장단점
- 장점
- 실시간으로 한 객체의 변경사항을 다른 객체에 전파할 수 있습니다.
- 느슨한 결합으로 시스템이 유연하고 객체간의 의존성을 제거할 수 있습니다.
- 단점
- 너무 많이 사용하게 되면, 상태 관리가 힘들 수 있습니다.
- 데이터 배분에 문제가 생기면 자칫 큰 문제로 이어질 수 있습니다.
'디자인 패턴 > 행위 패턴' 카테고리의 다른 글
Chain of responsibility 패턴 (0) | 2021.10.29 |
---|---|
Iterator 패턴 (0) | 2021.10.26 |
Visitor 패턴 (0) | 2021.10.23 |
Command 패턴 (0) | 2021.10.16 |
State 패턴 (0) | 2021.10.12 |