옵저버 패턴의 작동 원리
1. 객체가 등장해서는 주제한테 자기도 옵저버가 되고 싶다고 이야기합니다.
2. 옵저버 등록을 합니다.
3. 주제값이 바뀌면 모든 옵저버가 주제 값이 바뀌었다는 연락을 받습니다.
4. 기존 등록되어있는 객체가 탈퇴하고 싶다는 요청을 합니다.
5. 주제에 새로운 값이 등록되더라도 탈퇴한 객체는 연락을 받지 않습니다.
옵저버 패턴
- 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다.
- 한 객체의 상태가 변경되면 그 객체에 의존하는 모든 객체에 연락이 갑니다.
- 옵저버 패턴은 신문사와 구독자로 이어지는 신문 구독 서비스와 비슷합니다.
- 주제가 상태를 저장하고 제어합니다. 따라서 상태가 들어이는 객체는 하나만 있을 수 있습니다.
- 옵저버는 상태를 사용하지만 반드시 소유할 필요는 없습니다. 따라서 옵저버는 여러개가 있을 수 있으며, 주제에서 상태가 바뀌었다는 사실을 알려 주길 기다리는, 주제에 의존적인 성질을 갖습니다.
느슨한 결합의 위력
- 객체들이 상호작용할 수는 있지만, 서로를 잘 모르는 관계를 의미한다.
- 주제는 옵저버가 특정 인터페이스(observer 인터페이스)를 구현한다는 사실만 안다.
- 옵저버는 언제든지 새로 추가할 수 있습니다.
- 새로운 형식의 옵저버를 추가할 때도 주제를 변경할 필요가 전혀 없습니다.
- 주제와 옵저버는 서로 독립적으로 재사용할 수 있습니다.
- 주제나 옵저버가 달라져도 서로에게 영향을 미치지는 않습니다.
디자인 원칙
- 상호작용하는 객체 사이에는 가능하면 느슨한 결합을 사용해야 한다.
주제와 옵저버가 푸시(WeatherData 가 ~Dispay에게 상태를 알리는 방식)와 풀(~Display가 WeatherData로 부터 상태를 끌어오는 방식)
- 디스플레이가 WeatherData 객체로 부터 필요할때마다 데이터를 끌어오는 풀 방식이 유리하다.
'Java > DesignPattern' 카테고리의 다른 글
[HeadFirst] 5장 싱글턴 패턴 (0) | 2022.08.24 |
---|---|
[HeadFirst] 4장 팩토리 패턴 (0) | 2022.08.16 |
[HeadFirst] 3장 데코레이션 패턴 (0) | 2022.08.13 |
[헤드퍼스트] 1장 전략패턴 (0) | 2022.08.02 |