한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다.
<aside> 💡 알아두어야 할 키워드 : 느슨한 결합
</aside>
유씨는 평소 개발만 공부하다보니 사회, 경제, 정치 등 여려 교양 지식을 습득하지 못 하고 있다. 길가다 우연히 신문을 파는 아저씨를 만나게 되어 신문을 구독하기로 마음먹었다. 매일 집 앞으로 새로운 내용의 신문이 도착한다. 물론 유씨말고도 다양한 구독자들이 존재한다.
구독을 신청한 구독자들은 매일 바뀐 상태의 신문을 받는다!! 여기서 **구독자 = 옵저버
**이다.
하지만 시간이 지나자 유씨는 신문마저 읽지 않았고 결국 구독을 취소하였다. 이 과정이 옵저버 패턴에서 일어나는 과정이다.
필요에 따라 옵저버로 등록하여 상태가 변할때마다 알림을 받을 수 있고 원하면 옵저버에서 탈퇴할 수 있다.
개발자 유씨는 오리 게임 프로젝트를 잘 마무리하고 새로운 임무를 부여받았다. 그 임무는 기상청 데이터를 활용하여 온도가 바뀔때마다 여러 디스플레이가 각각의 화면으로 보여질 수 있도록 기능을 구현해야한다.
class WeatherData {
public double setTemperature() {
// 기상청 데이터 가져오는 로직
this.temperature = 19.1D;
}
public double setHumidity() {
// 기상청 데이터 가져오는 로직
return this.humidity = 80.0D;
}
public void measure() {
// 유씨가 구현해야될 로직
}
}
신입 개발자 유씨는 여러 고민을 해보며 다음과 같이 코드를 구현하였다.
public void measure() {
display1.update(temperature, humidity);
display2.update(temperature, humidity);
display3.update(temperature, humidity);
}
역시나 선배개발자가 와서 위 코드에 문제에 대해 이야기했다. '매번 디스플레이를 추가하거나 삭제할건가요? 좀 더 추상화시켜보세요! 힌트는 옵저버 패턴이에요.'