요약
- 객체들에게 연락 돌리기 (옵저버 패턴)
- 기상 모니터링 애플리케이션 알아보기
- WeatherData 클래스 살펴보기
- 구현 목표
- 기상 스테이션용 코드 추가하기
- 원칙으로 추가 코드 살펴보기
- 옵저버 패턴 이해하기
- 옵저버 패턴의 작동 원리
메모
CHAPTER 02. 객체들에게 연락 돌리기 (옵저버 패턴)
기상 모니터링 애플리케이션 알아보기
- WeatherData 객체는 Weather-O-Rama에서 만든 물리 기상 스테이션과 통신해서 갱신된 기상 데이터를 가져옴.
- 디스플레이를 업데이트하려면 WeatherData 객체를 고쳐야 함.
- 우리는 WeatherData 객체로 현재 조건, 기상 통계, 기상 예보, 이 3가지 항목을 디스플레이 장비에서 갱신해 가면서 보여주는 애플리케이션을 만들어야 함.
WeatherData 클래스 살펴보기
- getTemperature(), getHumidity(), getPressure(), measurementsChanged() 메서드를 가지고 있음.
- measurementsChanged 메서드는 WeatherData가 갱신된 값을 가져올 때마다 호출됨.
- 우리는 measurementsChanged 를 구현하면 됨.
구현 목표
- WeatherData에서 새로운 측정값이 들어올 때마다 디스플레이를 갱신해야 함.
- 디스플레이를 업데이트하도록 measurementsChanges()메소드에 코드를 추가해야 함.
- 추가적으로, 변화에 대응하기 위해 확장성 있는 기능을 고려한다.
기상 스테이션용 코드 추가하기
public class WeatherData {
// 인스턴스 변수 선언
public void measurementsChanged() {
float temp = getTemperateure();
float humidity = getHumidity();
float pressure = getPressure();
currentConditionsDisplay.update(temp, humidity, pressure);
statisticsDisplay.update(temp, humidity, pressure);
forecastDisplay.update(temp, humidity, pressure);
}
// 기타 메소드
}
원칙으로 추가 코드 살펴보기
- 위 코드는 문제가 있음.
- 인터페이스가 아닌 구체적인 구현을 바탕으로 코딩하고 있음.
- 새로운 디스플레이 항목이 추가될 때마다 코드를 변경해야 함.
- 실행 중, 디스플레이 항목을 추가하거나 제거할 수 없음.
- 바뀌는 부분을 캡슐화하지 않음.
옵저버 패턴 이해하기
- 신문 구독 메커니즘만 제대로 이해할 수 있다면 옵저버 패턴을 쉽게 이해할 수 있음.
- 신문사(subject) + 구독자(observer) = 옵저버 패턴
- 주제에서 중요한 데이터를 관리함.
- 주제 데이터가 바뀌면 옵저버에게 그 소식이 전해짐.
- 옵저버 객체들은 주제를 구독하고 있기에(주제 객체에 등록되어 있음) 주제 데이터가 바뀌면 갱신 내용을 전달받음.
옵저버 패턴의 작동 원리
- 옵저버가 아닌 객체를 옵저버로 등록할 수 있음.
- 주제 값이 바뀌면 모든 옵저버가 연락을 받음.
- 옵저버 객체에서 해지 요청을 할 수 있음.