옵저버(Observer) 패턴: 행위패턴
클래스 간의 복잡한 관계들을 캡슐화하여 하나의 클래스에서 관리하도록 처리하는 패턴, 일대다(one-to-many) 의존성을 정의한다.
어떤 객체의 상태가 변할 때 그와 연관된 객체들에게 알림을 보내는 디자인 패턴이 옵저버 패턴이라고 할 수 있다.
실시간으로 한 객체의 변경사항을 다른 객체에 전파할 수 있으며, 느슨한 결합으로 시스템이 유연하고 객체간의 의존성을 제거할 수 있다. 하지만 너무 많이 사용하게 되면, 상태 관리가 힘들 수 있다. 또 데이터 배분에 문제가 생기면 큰 문제로 이어질 수 있다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다.
쉽게 말해 subject에 observer을 등록하여 정보를 받는(notify) 패턴.
Subject : Observable이라고도 부르며 이벤트가 발생하는 객체, Observer의 리스트를 가지고 있다, Observer의 등록/해제/갱신 메서드를 이용하여 Subject을 등록/해제/갱신 할 수 있다.
Observer : Subject의 이벤트를 관찰하는 대상, 이벤트가 발생하면 연결된 하위 대상들에게 알려준다
ConcreteObserver : 각자의 역할을 수행하면서 Observer를 통해 Subject의 이벤트를 감지한다.
옵저버 패턴의 장단점
장점
- 느슨한 결합으로 유연한 객체지향 시스템을 구축할 수 있다.
- OCP원칙을 지킬 수 있다.
단점
- 알림이 가는 순서를 보장할 수 없다.
- 너무 많이 사용하게 되면, 상태관리가 힘들 수 있다.
자바에서의 Observer
java에서는 Observer 기능을 지원해준다. (Observer 인터페이스와 Observable 클래스)
https://pjh3749.tistory.com/266
이쪽 두 블로그에 자세히 설명되어 있다.
Reference
'OOP > Design Pattern' 카테고리의 다른 글
20. 전략(Strategy) 패턴 (0) | 2023.03.17 |
---|---|
19. 스테이트(State) 패턴 (0) | 2023.03.01 |
17. 메멘토(Memento) 패턴 (0) | 2023.02.25 |
16. 중재자(Mediator) 패턴 (0) | 2023.02.21 |
15. 이터레이터(iterator) 패턴 (0) | 2023.02.21 |