2. 객체들에게 연락 돌리기: 옵저버 패턴
옵저버 패턴의 정의
- 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에 연락이 가고 자동으로 내용이 갱신
- 일대다(one-to-many) 의존성 정의: subject(주제) - observer(옵저버)
옵저버 패턴 구조
- subject interface
- 객체에서 옵저버로 등록하거나 옵저버에서 탈퇴하고 싶을 때 필요한 메소드
registerObserver
removeObserver
- 상태가 바뀔 때마다 모든 옵저버들에게 연락하는 메소드
notifyObservers
- observer interface
- subject의 상태가 바뀌었을 때 호출되는
update
메소드
- subject class
- subject interface 구현
- 상태를 설정하고 알아내는 getter / setter 메소드를 가지고 있을 수도 있음.
- observer class
느슨한 결합
<aside>
💡 디자인 원칙
상호작용하는 객체는 가능하면 느슨한 결합을 사용해야 한다.
→ 느슨하게 결합하는 디자인을 사용하면 객체 사이의 상호 의존성을 최소화할 수 있기 때문에 변경 사항이 생겨도 무난하게 처리할 수 있는 유연한 객체지향 서비스를 구축할 수 있다.
</aside>
- 느슨한 결합(Loose Coupling): 객체들이 상호작용 할 수 있지만, 서로 잘 모르는 관계
옵저버 패턴에서 느슨한 결합을 사용하는 방법
- subject는 observer가 특정 인터페이스(observer interface)를 구현한다는 사실만 안다.
- observer는 언제든지 추가, 제거할 수 있다.
- 새로운 형식의 observer를 추가해도 subject를 변경할 필요가 없다.
- subject와 observer는 서로 독립적으로 재사용할 수 있다.
- subject나 observer가 달라져도 서로에게 영향을 미치지 않는다.
옵저버 패턴 구현하기
- push: subject가 observer로 데이터를 보내는 방식