상세 컨텐츠

본문 제목

Observer Pattern 배워보기

Java

by techbard 2014. 1. 21. 13:46

본문

반응형

옵서버 패턴은 어떤 클래스에 변화가 발생했을때 다른 클래스에 그 변화를 통보해 주는 패턴이라고 한다.

 

자바 util 패키지에서 제공하는 Observer 인터페이스와 Observable 클래스로 구현한다.

 

객체를 옵서버가 되게 하려면 Observer 인터페이스를 구현하고 Observable 객체에 addObserver() 메소드를 호출해서 자기 자신을 등록하면 된다.

 

Observable = 알림을 주는 객체

Observer = 알림을 대기하는 객체

 

Observable이 Observer 들에게 알림을 주려면 setChange() 메소드를 호출해서 상태가 바뀌었음을 선언하고, notifyObservers(obj arg)를 통해 인자로 데이터를 보낸다.

 

1. 먼저 Observable 역할을 하는 클래스를 작성한다.

 

 

Observable 클래스를 상속받아 setChanged() 메소드와 notifyObservers() 메소드를 사용한다.

 

2. Observer 객체들을 작성한다.

 

 

 

사실상 똑같은 클래스이며 Observer 인터페이스중 update 메소드를 오버라이드 해서 원하는 기능을 추가했다. 기능은 Observable에서 주는 int 값을 받아 그것이 홀수이면 ObsOdd 클래스가 반응하고, 짝수라면 ObsEven 클래스가 반응하는 것이다.

 

3. 이제 테스트 클래스를 작성한다.

 

 

Observable 클래스를 상속한 Watcher 클래스 두 개의 Observer 객체를 등록한 후 watch.watcherAction() 메소드에서 int 값을 생성해서 던지고 다시 랜덤값을 생성한 후 다시 던지기를 반복한다.

 

결과1:

[Watcher send: 18]
[class ObsEven: It's even.]
[Watcher send: 22]
[class ObsEven: It's even.]
[Watcher send: 14]
[class ObsEven: It's even.]
[Watcher send: 12]
[class ObsEven: It's even.]
[Watcher send: 21]
[class ObsOdd: It's odd.]

 

결과2:

[Watcher send: 14]
[class ObsEven: It's even.]
[Watcher send: 15]
[class ObsOdd: It's odd.]
[Watcher send: 6]
[class ObsEven: It's even.]
[Watcher send: 6]
[class ObsEven: It's even.]
[Watcher send: 17]
[class ObsOdd: It's odd.]

 

* Java 내장 Observer 패턴은 Obseravable 이 클래스이며 Observable 인터페이스도 존재하지 않아 사용할 수 없다. (자바에서는 다중 상속이 지원되지 않으므로)

 

직접 구현하는 방법이 많이 쓰인다고 한다.

 

 

ObserverPattern(Java).zip

 

반응형

관련글 더보기

댓글 영역