- 관심있는 객체의 상태 변화를 관찰하고,
객체의 상태변화가 발생할 때 마다 알림을 받는 패턴을 뜻한다.
✏️ 옵저버 패턴의 구조
📍 Subscriber - 구독자
- 객체의 상태가 변화할 경우 알림을 받는 쪽을 뜻한다.
subscribe()
을 통해 특정 객체의 변화를 감지하기 시작한다.
unsubscribe()
을 통해 객체의 변화 감지를 종료한다.
📍 Publisher - 공급자
- 변화가 발생되는 객체를 뜻한다.
subscribe()
을 한 구독자에 한에 객체의 변화가 발생될 때
notifySubscribers(eventType)
으로 변화에 대한 알림을 보낸다.
---- subscribe --->
Subscriber <- notifySubscribers -- Publisher
---- unsubscribe --->
✏️ 옵저버 패턴의 작동방식
- 구독자가 구독을 할 경우 공급자는 내부적으로 관리하는
subscribers
배열에 구독자를 추가한다.
- 공급자 객체가 변화하면
notifySubscribers
를 호출해 배열에 있는 구독자 들에게 상태변화를 알린다.
- 이 때 어떤 상태가 변화되었는지에 대한
eventType
을 인자로 함께 보낸다.
- 구독자는 개별적으로 핸들러를 구현해
eventType
에 맞게 새로운 작업을 수행하게 된다.
📍 객체지향적 설계
- 공급자는 객체의 변화에 따른
eventType
만 전송하고 그 처리는 구독자의 handler 에서 이루어 진다.
- 즉, 새로운 구독이 발생되더라도 공급자는 그것을 알 필요도, 코드를 변경할 필요도 없다.