2009. 9. 18. 14:51 Programming/Design Pattern

옵저버 패턴(Observer Pattern)

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다. 즉, 한 객체의 상태가 변경되면 그 객체에 의존하는 모든 객체에 연락이 간다.

일대다 관계는 주제와 옵저버에 의해 정의된다. 옵저버는 주제에 의존한다. 주제의 상태가 바뀌면 옵저버한테 연락이
간다. 연락 방법에 따라 옵저버에 있는 값이 새로운 값으로 갱신 될 수도 있다.

옵저버 패턴을 구현하는 방법에는 여러가지 있지만, 대부분 주제 인터페이스와 옵저버 인터페이스가 들어있는 클래스 디자인을 바탕으로 한다.


클래스 다이어그램

----------------------                   옵저버                -----------------------
<<인터페이스>>       --------------------------->       <<인터페이스>>
      Subject                                                                    Observer
----------------------                                            -----------------------
registerObserver()                                                    update()
removeObserver()                                                  -----------------------
notifyObserver()                                                                      |
----------------------                                                             |
          |                                                                               |
          |                                                                               |
---------------------------               주제                --------------------------
 ConcreateSubject           <----------------------     ConcreateObserver
---------------------------                                     -------------------------- 
registerObserver() { ... }                                           update()
removeObserver() { ... }                                           // 기타 옵저버용 메소드
notifyObserver() { ... }                                             --------------------------

getState()
setState()
----------------------------


느스한 결합의 위력

두 객체가 느슨하게 결합되어 있다는 것은, 그 둘이 상호작용을 하긴 하지만 서로에 대해 서로 잘 모른다는 것을 의미한다.
옵저버 패턴에서는 주제와 옵저버가 느슨하게 결합되어 있는 객체 디자인을 제공한다.

느슨하게 결합하는 디자인을 사용하면 변경 사항이 생겨도 무난히 처리할 수 있는 유연한 객체지향 시스템을 구축할 수 있다. 객체 사이의 상호 의존성을 최소화할 수 있기 때문이다.



- 이 종 화 (ingenuity.egloos.com) -
posted by 부풍