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) -