책너두 (헤드 퍼스트 디자인 패턴) 5일차 (~86p)

요약

  • 객체들에게 연락 돌리기 (옵저버 패턴)
    • 기상 모니터링 애플리케이션 알아보기
    • 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) = 옵저버 패턴
  • 주제에서 중요한 데이터를 관리함.
    • 주제 데이터가 바뀌면 옵저버에게 그 소식이 전해짐.
    • 옵저버 객체들은 주제를 구독하고 있기에(주제 객체에 등록되어 있음) 주제 데이터가 바뀌면 갱신 내용을 전달받음.

옵저버 패턴의 작동 원리

  • 옵저버가 아닌 객체를 옵저버로 등록할 수 있음.
  • 주제 값이 바뀌면 모든 옵저버가 연락을 받음.
  • 옵저버 객체에서 해지 요청을 할 수 있음.

댓글

Designed by JB FACTORY