성욱박 2019. 4. 21. 16:46

2. Observer Pattern (옵저버 패턴)


2.1 Observer Pattern 이란?

- Subject의 상태 정보가 갱신되면 Subject에 의존하는 Observer들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한 패턴

- 느슨한 결합을 이용한 일대다 의존성 관계.

- JDK에서 가장 많이 쓰이는 패턴 중 하나.

- subject(1) : observer(多)


subject 객체에서 데이터를 관리

observer 객체들은 subject 객체에 등록되어 있으며 subject 객체의 데이터가 갱신되면 갱신 내용을 전달받는다.


2.2 기상 스테이션 APP 만들기


2.2.1 요구사항

최신 기상 정보(기온, 습도, 온도)를 수집하는 측정기부터 받은 Data를 기반으로 아래 세가지 항목을 구현 및 조건

- 현재 기상정보

- 기상 통계

- 기상 예보

- 측정기로의 최신 정보가 갱신될 때 마다 기능들이 나타내는 결과도 갱신

- 다른 개발자들이 새로운 항목을 추가할 수 있도록 확장 가능해야 함

- 사용자들이 항목을 추가/제거 가능


2.2.2 Subject interface

Observer들은 Subject에 의존한다.

Subject의 상태정보가 바뀌면 Subject를 의존하는 Observer들의 정보가 갱신된다.


 

2.2.3 Subject interface 구현 클래스

실제 Subject 역할을 할 구현 클래스이다.



2.2.4 Observer interface

Subject interface를 구현한 클래스를 의존할 클래스들이 구현해야하는 Observer interface이다.




2.2.5 Observer interface 구현 클래스

실제 Observer가 될 구현 클래스

해당 항목은 Subject 구현 클래스에 의존하는 Observer 목록에서 제거함 으로서 항목의 제거가 가능하다.


2.2.6 Test class


2.2.7  디자인 원칙 

서로 상호작용하는 객체 사이에서는 가능하면 느슨하게 결합(Losose Coupling)하는 디자인을 사용해야 한다.

상호 의존성을 최소화 함으로서 변경 사항이 생겨도 문제가 발생하지 않음


2.2.8 JDK에서 Observer Pattern을 이용한 부분

- Observable API (java.util.Observer interface, java.utl.Observable class)

  구현보다는 구성에 맞춰서 프로그래밍한다는 디자인 원칙에 위배되기 때문에 제약이 많다.

  이미 다른 super class를 확장하고 있는 class에는 Observable class의 기능을 추가할 수 없다.

- JavaBeans(MVC)

- Swing(GUI framework)

   Button(주제) - listener(옵저버)