Design Pattern

[Design pattern] 감시자 Observer

mongyang 2013. 2. 25. 13:29

 

패턴

- 감시자(Observer) 패턴

 

의도

- 객체 사이에 다수의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 객체에 의존성을 가진 다른 객체들이 변화를 통지 받고 자동으로 갱신될 있게 만든다.

 

키워드

- 데이터에 대한 감시자의 자동 갱신

 

다른 이름

- 종속자(Dependent), 게시-구독(Publish-Subscribe)

 

동기

1. 어떤 하나의 시스템을 서로 연동되는 클래스 집합으로 분할했을 발생하는 공통적인 부작용은 관련된 객체 간에 일관성을 유지하도록 해야 한다는 것이다.

2. 그렇다고 일관성 관리를 위해서 객체간의 결합도를 높이고 싶지는 않다. 이유는 클래스의 재사용성이 떨어지기 때문이다.

 

동기 예제.

- 그래픽 사용자 인터페이스 툴킷을 예로 든다. 툴킷은 표현 부분과 이에 대응하는 데이터를 분리한다. 응용프로그램 자료와 표현을 정의하는 클래스는 재사용 있다. 그러나 이들은 함께 동작해야 한다.

 

1. 테이블 형태의 객체와 형태로 표현된 객체 모두 동일한 자료 값을 나타내나, 스프레드시트와 바는 서로 관련 없는 클래스 들이므로 독립적으로 재사용이 가능해야 한다.

2. 만일, 독립적 객체가 하나의 정보 값을 표현하는데 함께 사용된다면, 사용자가 스프레드시트에서 정보를 변경할 바에도 변경 정보가 반영되어야 한다.

3. 스프레드 시트와 차트는 데이터 객체에 종속적이기 때문에 데이터에 일어난 변경을 통보 받아야 한다.

4. 처럼, 종속적인 객체가 두개로 제한되는 것은 아니다.

 

패턴 소개

1. 감시자 패턴은 이런 관련성을 관리하는 패턴이다.

2. 패턴에서 중요한 객체는 주체(subject) 감시자(observer)이다.

3. 주체는 독립된 여러 개의 감시가 있을 있다.

4. 모든 감시자는 주체의 상태 변화가 있을 때마다 변화의 통보를 받는다.

5. 이런 종류의 상호 작용을 게시-구독 관계라고 한다.

6. 불특정 다수의 감시자가 통보를 수신하기 위해서 구독을 신청하는 것이다.

 

활용성

1. 어떤 추상 개념이 가지 양상을 갖고 하나가 다른 하나에 종속적일 . 양상을 별도의 객체로 캡슐화하여 이들 각각을 사용할 있다.

2. 객체에 가해진 변경으로 다른 객체를 변경해야 하고, 프로그래머들은 얼마나 많은 객체들이 변경되어야 하는지 몰라도 될때.

3. 어떤 객체가 다른 객체에 자신의 변화를 통보할 있는데, 변화에 관심있어 하는 객체들이 누구인지에 대한 가정 없이도 그러한 통보가 .

 

구조도

 

 

1. Subject

- 감시자들을 알고 있는 주체

2. Observer

- 주체에 생긴 변화에 관심있는 객체를 갱신하는데 필요한 인터페이스들을 정의한다.

3. ConcreteSubject

- ConcreteObserver 객체에게 알려주어야 하는 상태를 저장한다. 또한 상태가 변경될 감시자에게 통보한다

4. ConcreteObserver

- ConcreteSubject 객체에 대한 참조자를 관리한다. 주체의 상태와 일관성을 유지해야 하는 상태를 저장한다.

- 주체의 상태와 감시자의 상태를 일관되게 유지하는데 사용하는 갱신 인터페이스를 구현한다.

 

협력관계

 

결과

1. Subject Observer 클래스 간에는 추상적인 결합도만이 존재.

2. 브로드캐스트(broadcast) 방식의 교류가 가능.

3. 예측하지 못한 정보를 갱신한다.

'Design Pattern' 카테고리의 다른 글

[Design pattern] 반복자 Iterator  (0) 2013.02.25
[Design pattern] 복합체 Composite  (0) 2013.02.25
[Design pattern] Bridge  (0) 2013.02.21
[Design pattern] Reflection  (0) 2013.02.21
[Design pattern] Micro Kernel  (0) 2013.02.21