런타임노트

[헤드퍼스트 디자인패턴] 5일차. 70-86p 본문

책책책 책을 읽읍시다‼ ver.개발/[ 헤드퍼스트 디자인패턴 ]

[헤드퍼스트 디자인패턴] 5일차. 70-86p

D269 2023. 4. 29. 01:54
728x90

 

5일차

헤드퍼스트 디자인패턴 [금요일]

70-86pg

요약

CHAPTER 02. 객체들에게 연락돌리기 (feat. 옵저버 패턴)

옵저버 패턴 : 뭔가 중요한 일이 일어났을 때 객체에게 새 소식을 알려 줄 수 있는 패턴!

 

Story…

차세대 인터넷 기반 기상 스테이션 구축 프로젝트

WeatherData 객체를 바탕으로 기상 스테이션을 만들 예정

WeatherData 객체는 현재 기상조건을 추적한다.

표시할 3개의 항목 : 현재 조건, 기상 통계, 간단한 기상 예보

→ 위 항목 모두 WeatheData에서 최신 측정치를 수집할 때마다 실시간으로 갱신 됨.

타 개발자가 새로운 날씨 디스플레이를 쉽게 추가할 수 있도록 해야함.

 

 

[ 기상 모니터 애플리케이션 ]

  1. 기상 스테이션 : 실제 기상정보를 수집하는 물리 장비
  2. WeatherData 객체 : 기상 스테이션으로부터 오는 정보를 추적하는 객체
  3. 디스플레이 장비 : 사용자에게 현재 기상조건을 보여주는 디스플레이 장비

→ 1,2는 weather-O-Roma에서 제공, 3은 우리가 구현

→ WeatherData객체와 디스플레이를 통합하는 작업도 우리가


WeatherData 클래스 살펴보기.

: 기상 스테이션에서 갱신된 정보를 가졍는 일은 weatherData 객체가 알아서 해준다는 점 알기.

: weatherData에서 갱신된 값을 가져올 때마다 measurementsChanged() 메소드가 호출된다는 점 기억하기.

기능을 구현하기 위해 우리가 해야할 목표 정하기

 

 

** 소프트웨어 개발에서 바뀌지 않는 단 하나 : 변화!

나중에 기상 스테이션이 더 발전하면 디스플레이가 더 늘어날 수도 있으니 ‘확장 기능’을 추가해보자.

→ 확장성

 

 

코드살펴보기

public void measurementsChanged() {
	float temp = getTemperature();
	float humidity = getHumidity();
	float pressure = getPressure();

	// 아래 세 줄은 바뀔 수 있는 부분이니 캡슐화 해야한다.
	currentConditionDisplay.update(temp, humidity, pressure);
	statisticsDisplay.update(temp, humidity, pressure);
	forecastDisplay.update(temp, humidity, pressure);
}
  • 구체적인 구현에 맞춰서 코딩했으므로 디스플레이 항목을 추가하거나 제거할 수 없다.
  • update() 메소드를 가지고 있으니 공통 인터페이스를 사용하긴 한다.

 

옵저버 패턴 이해하기 : 신문 구독

신문사 + 구독자 = 옵저버 패턴

신문사는 주제(subject), 구독자는 옵저버(observer)

 

 

발췌

💡 옵저버 패턴 : 뭔가 중요한 일이 일어났을 때 객체에게 새 소식을 알려 줄 수 있는 패턴!
신문사 + 구독자 = 옵저버 패턴

 

메모

코드를 하나하나 보면서 생각해볼 수 있어서 좋다.

인터페이스, 캡슐화 등에 대해 했는지 안했는지 체크 할 수 있어서 복습해서 좋다.

 

 

 

 

728x90
반응형