기상 모니터링 애플리케이션 알아보기
구현 목표
- WeatherData 클래스에는 3가지 측정값(온도, 습도, 기압)의 게터 메소드가 있습니다
- 새로운 기상 측정 데이터가 들어올 때마다 measurementsChanged()메소드가 호출됩니다(이 메소드가 어떤 식으로 호출되는지 모르며, 사실 알 필요도 없으며, 아무튼 그냥 그 메소드가 호출된다는 사실만 알고 있습니다).
- 기상 데이터를 사용하는 디스플레이 요소 3가지를 구현해야 합니다. 하나는 현재 조건 디스플레이, 다른 하나는 기상 통계 디스플레이, 마지막은 기상 예보 디스플레이입니다. WeatherData에서 새로운 측정값이 들어올 때마다 디스플레이를 갱신해야 합니다.
- 디스플레이를 업데이트하도록 measurementsChanged() 메소드에 코드를 추가해야 합니다.
추가 목표
- 소프트웨어 개발에서 바뀌지 않는 단 하나 ! = 변화
- 확장성: 다른 개발자가 새로운 디스플레이를 만들고 싶을 수도 있고, 사용자가 마음대로 디스플레이 요소를 더하거나 뺄 수 있게 해 주는 것도 좋음
옵저버 패턴 이해하기
- 신문 구독을 볼 때
- 신문사 + 구독자 = 옵저버 패턴
- 신문사 = 주제 (subject), 구독자를 옵저버 (observer)
- 과정
- 주제객체 : 주제에서 중요한 데이터를 관리함
- 주제 데이터가 바뀌면 옵저버에게 그 소식이 전해짐. 데이터가 바뀌면 새로운 데이터값이 어떤 방법으로든 옵저버에게 전달됨
- 옵저버 객체들은 주제를 구독하고 있으며 (주제 객체에 등록되어 있으며) 주제 데이터가 바뀌면 갱신 내용을 전달받습니다.
옵저버 패턴의 정의
- 옵저버 패턴(Observer Pattern) 은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다.
- 옵저버 패턴은 여러 가지 방법으로 구현할 수 있지만, 보통은 주제 인터페이스와 옵저버 인터페이스가 들어있는 클래스 디자인으로 구현합니다.