# 옵저버 패턴
![Imgur](https://i.imgur.com/7rZ5gIs.png)
## 정의
한 객체(subject)의 상태가 바뀌면 이를 구독하는 모든 객체(observer)에게 연락이 가고, 자동 갱신되는 일대다 패턴.
## 장점
높은 복잡도(정보의 크기, 객체 규모, 객체간 관계)의 상황에서 객체간 정보 교환시 가이드 라인을 제시.
## 특징
푸시(push)방식과 풀(pull) 방식이 존재.
## 디자인 원칙
1. 바뀌는 부분은 캡슐화한다.
- 바뀌는 것: subject, observers
2. 상속보다는 구성을 활용한다.
- subject는 observer를 composition하여 관리.
3. 구현이 아닌 인터페이스에 맞춰 프로그래밍한다.
- 인터페이스(subject, observer)를 구현하는 것으로 느슨한 결합을 유도.
4. 상호작용 객체간 커플링을 낮춘다.
## 설계 예
![Imgur](https://i.imgur.com/rouR5MA.png)