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

요약

  • 객체들에게 연락 돌리기 (옵저버 패턴) 계속
    • 인생을 바꿀 애플리케이션 만들기
      • 옵저버로 알림이 가는 순서에 의존하지 말기
    • 푸시를 풀로 바꾸기
      • 옵저버가 필요한 데이터를 골라서 가져가도록 만드는 방법이 더 좋음
    • 옵저버 패턴의 디자인 원칙
      • 옵저버 패턴을 통해 디자인 원칙을 하나씩 확인할 수 있음.

메모

인생을 바꿀 애플리케이션 만들기

  • p101 ~ 102 참고
  • 자바에는 Observable 클래스와, Observer 인터페이스가 있음.
    • 이 클래스들은 자바 9 이후로 쓰이지 않음.
    • 각자 자신의 코드에서 기본적인 옵저버 패턴을 직접 구현하는게 더 편하다고 생각하는 사람이 늘어남.
      • 자바 Bean이나 비동기 스트림을 처리하는 Flow API에서 옵저버 패턴을 이용한 기능들을 제공함.
  • 주제 → 옵저버로 알림이 가는 순서에 의존하지 말라는 JDK 권고도 있음.

푸시를 풀로 바꾸는 건 정말 좋은 생각임.

  • 주제가 옵저버로 데이터를 보내는 푸시를 사용하거나, 옵저버가 주제로부터 데이터를 당겨오는 을 사용하는 방법 중 어느 하나를 선택하는 일은 구현 방법의 문제임.
    • 하지만, 대체로 옵저버가 필요한 데이터를 골라서 가져가도록 만드는 방법이 더 좋음.

풀 방식으로 코드 바꾸기

  • 값이 변했다는 알림을 옵저버가 받았을 때, 주제에 있는 게터 메소드를 호출해서 필요한 값을 당겨오도록 바꾼다.
// 주제에서 알림 보내기 (update 메소드 인자 없이 호출)
public void notifiyObservers() {
    for (Observer observer : observers) {
        observer.update();
    }
}

// 오버저버에서 알림 받기 (update 메소드 시그니처 변경)
public interface Observer {
    public void update(); 
}

// WeatherData 의 게터 메소드로 주제의 날씨 데이터를 가져오도록 옵저버 구상 클래스 수정
public void update() {
    this.temperature = weatherData.getTemperature();
    this.humidity = weatherData.getHumidity();
}

디자인 도구상자 안에 들어가야 할 도구들

  • 객체지향 도구상자에 새로운 도구들이 추가됨.
    • 옵저버 패턴

옵저버 패턴의 디자인 원칙

  • 애플리케이션에서 달라지는 부분을 찾아내고 달라지지 않는 부분과 분리한다.
    • 옵저버 패턴에서 주제를 바꾸지 않고 주제의 상태에 의존하는 객체들을 바꿀 수 있음.
  • 구현보다는 인터페이스에 맞춰서 프로그래밍한다.
    • 주제와 옵저버 모두 인터페이스를 사용함.
    • 느슨한 결합을 만들 수 있음.
  • 상속보다는 구성을 활용한다.
    • 구성을 활용해서 옵저버들을 관리함.

댓글

Designed by JB FACTORY