728x90
반응형
목차
가상 모니터링 애플리케이션 알아보기
- Weather-O-Rama와 계약하면 WeatherData객체로 현재조건, 기상통계, 기상예보
3가지 항목이 제공된다. - 디스플레이 장비에 업데이트 하는 부분은 직접 개발 해야 한다.
가상 스테이션 코드 구현
WeatherData
--------------------
getTemperature()
getHumidity()
getPressure()
measurementsChanged()
- Weather클래스에는 가장 최근에 측정된 온도, 습도, 기압 값을 리턴하는 메소드가 있다
- WeatherData에서 갱신된 값을 가져올 때마다 measurementsChanged() 메소드가 호출된다.
- 디스플레이를 구현하려면 3가지 요소를 구현해야한다.
- 디스플레이 업데이트하도록 measurementsChanged()메소드에 코드를 추가해야한다.
아래쪽에 각각의 Display 를 구현하는 부분은 다른 디스플레이 항목을 추가하려면 프로그램을 고쳐야한다.
update시 파라미터를 넘기는 부분도 바뀔 수 있는 부분이다.
옵저버 패턴 이해하기
신문 구독 매커니즘을 생각하면 된다.
신문사는 구독하는 구독자에게 신문을 제공하고 구독자는 구독을 원하지 않으면 구독을 해제한다.
옵저버 패턴의 정의
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른객체에게 연락이 가고 자동으로 내용이 갱신되는 방식.
일대다 의존성을 정의한다.
느슨한 결합
객체들이 상호작용할 수 있지만 서로 잘 모르는 관계(옵저버 패턴은 느슨한 결합)
옵저버 패턴에서의 느슨한 결합
- 주제는 옵저버가 특정 인터페이스(Observer 인터페이스)를 구현한다는 사실만 안다.
- 옵저버는 언제든지 새로 추가할 수 있다.
- 새로운 형식의 옵저버를 추가할 때도 주제를 변경할 필요가 없다.
- 주제와 옵저버는 서로 독립적으로 재사용할 수 있다.
- 주제나 옵저버가 달라져도 서로 영향을 미치지 않는다.
☝🏻 디자인 원칙
상호작용하는 객체 사이에는 가능하면 느슨한 결합을 사용해야 한다.
- 느슨하게 결합하는 디자인을 사용하면 변경사항이 생겨도 무난히 처리할 수 있는 유연한 객체지향 시스템을 구축할 수 있음
가상 스테이션 구현하기
풀 방식으로 코드 바꾸기
옵저버가 필요할 때마다 주제로부터 데이터를 당겨오는 방식.
주제에서 알림보내기
public void notifyObservers() {
observers.stream().forEach(
o -> o.update()
);
}
update메소드를 인자없이 호출하도록 수정
옵저버에서 알림받기
public interface Observer {
public void update();
}
Observer 인터페이스에서 update() 메소드에 매개변수가 없도록 변경
public void update() {
this.temperature = weatherData.getTemperature();
this.humidity = weatherData.getHumidity();
this.pressure = weatherData.getPressure();
display();
}
update() 메소드의 코드를 고친다.
getter메서드를 사용해서 값을 가져온다.
핵심정리
- 옵저버 패턴은 객체들 사이에 일대다 관계를 정의
- 주제는 동일한 인터페이스를 써서 옵저버에게 연락
- Observer 인터페이스를 구현하기만 하면 어떤 구상 클래스의 옵저버라도 패턴에 참여할 수 있음
- 주제는 옵저버들이 Observer인터페이스를 구현한다는 것을 제외하면 옵저버에 관혜 전혀 모름(느슨한 결합)
- 옵저버 패턴을 사용하면 주제가 데이터를 보내거나 옵저버가 데이터를 가져올 수 있다.(일반적으로 풀방식이 더 옳다고함)
- 스윙은 다른 여러 GUI 프레임워크와 마찬가지로 옵저버 패턴을 많이 사용함
- Rx Java, 자바빈, RMI 외에 코코아나 스위프트, 자바스크립트와 같은 다른 언어의 프레임워크에서도 옵저버 패턴을 많이 사용함
- 옵저버 패턴은 여러 개의 주제와 메시지 유형이 있는 복잡한 상황에서 사용하는 출판-구독 패턴과 친척
728x90
반응형
'책리뷰 > 헤드퍼스트 디자인패턴' 카테고리의 다른 글
헤드퍼스트 디자인패턴 - 싱글턴 패턴 (0) | 2022.07.12 |
---|---|
헤드퍼스트 디자인패턴 - 팩토리 패턴 (0) | 2022.07.05 |
헤드퍼스트 디자인패턴 - 데코레이터 패턴 (0) | 2022.06.23 |
헤드퍼스트 디자인패턴 - 전략 패턴 (0) | 2022.06.16 |