프로그램 아키텍쳐/디자인패턴

자바 내장 옵저버 패턴

본클라쓰 2009. 1. 4. 14:59

 자바에서 몇 가지 API를 통해서 자체적으로 옵저버패턴을 지원한다. 가장 일반적으로 쓸 수 있는 것으로 java.util 패키지에 들어있는 Observer 인터페이스와 Observable 클래스를 들 수 있다. 이 두 클래스는 푸시 방식으로도 갱신 할 수 있고, 풀 방식으로 갱신 할 수도 있다. 

 

 

객체를 옵저버로 지정하는 방법  

 Observer인터페이스(java.util.Observer인터페이스)를 구현하고 Observer 객체addObserver()메소드를 호줄하면 된다. 옵저버 목록에서 탈퇴하고 싶을 때는 deleteObserver()를 호출하면 된다.

   

Observable에서 연락을 돌리는 방법

우선 java.util.Observable 슈퍼클래스를 확장하여 Observble클래스를 만들어야 한다. 그 다음은 setChanged()메소드를 호출해서 객체의 상태가 바뀌었다는 것을 알리는 것이다. 그리고나서 notifyObservers()notifyObservers(Object arg) 메소드 중 하나를 호출한다.

   

옵저버가 연락을 받는 방법

update()메소드 구현

 

update(Observable o, Object arg)

 

전달인자 Observable o객체는 연락을 보내는 주체객체이고, Object arg객체는 notifyObservers()메소드에서 인자로 전달된 데이터 객체이다.

  

 

 

※ 참고 - java.util.Observable 클래스의 단점

 Observable 은 클래스이기 때문에 서브 클래스를 만들어야 한다는 점이 문제로 재사용성에 제약이 존재한다. Observable API를 살펴보면, setChanged() 메소드가 protected로 선언되어 있어, Observable의 서브 클래스에서만 setChanged() 메소드를 호출 할 수 있다.