반응형
설계에 있어 디자인의 원칙은 다음과 같다.
1. 어플리케이션에서 바뀌는 부분을 찾아내어 바뀌지 않는 부분으로부터 분리시킨다.
2. 특정구현이 아닌 인터페이스에 맞춰 처리한다.
3. 상속보다는 구성을 활용한다.
Observer 패턴은 어떤 주제의 내용이 변경되는 경우 그것의 감시자(Oberver)의 내용도 변경시킨다는 내용이다.
예를 들어보면 어떤 주제 S에 대해 Observer O1, O2 를 만든다고 하면
Observer라는 인터페이스가 정의되고 O1,O2는 Observer 인터페이스를 구현한다.
이 인터페이스는 update()라는 메소드를 가지고 있다고 하면
S클래스는 내부적으로
Oberver인터페이스를 등록하는 메소드,
삭제하는 메소드,
등록된 Observer들을 변경시키는(Observer인터페이스에서 정의된 update 메소드를 순차적으로 호출하는)메소드로 구성된다.
O1, O2를 생성하면서 S클래스를 생성시점에 넘겨주고,
생성자에서 S클래스를 받아 인터페이스를 등록하는 메소드에 O1, O2를 등록한다.
이렇게 O1, O2가 S에 등록되어 있게되면 S에서 변경사항이 발생할때 등록된 Observer들의 update 메소드를 호출하여 observer에서도 변경이 일어날 수 있게 한다.
이런 패턴은 java sdk에 이미 구현되어 있는데,
java.util.Observerable과
java.util.Observer 이다.
Observerable클래스는 extends 하여 사용하며 S의 역할을 하게 된다.
내부적으로 정의된
addOberver(Observer A) // Observer등록하는 메소드
notifyObservers() // 등록된 Observer들의 update 값을 호출한다.
등을 활용하여 쉽게 사용할 수 있다.
Observer에서 정의된 update메소드에서 Observerable의 값을 읽어가면 pull 방식
update 호출 시 파라메터로 값을 넘겨주는 push방식등이 있으며 주로 pull 방식을 사용한다.
현재 사용되고 있는 프레임웍에서 Oberver Pattern을 사용하고 있는 부분을 살펴보면
configuration xml에 log에 관련된 정보를 저장하고 있는 상태에서,
(로그를 파일로 쓸것인가 화면으로 쓸 것인가 , 어느 위치에 놓을 것인가 등등)
Observerable을 확장하고 있는 클래스에 Observer를 구현한 log클래스를 등록한 후
configuration의 변경을 적용하기 위해 notifyObservers()를 호출하고 있다.
1. 어플리케이션에서 바뀌는 부분을 찾아내어 바뀌지 않는 부분으로부터 분리시킨다.
2. 특정구현이 아닌 인터페이스에 맞춰 처리한다.
3. 상속보다는 구성을 활용한다.
Observer 패턴은 어떤 주제의 내용이 변경되는 경우 그것의 감시자(Oberver)의 내용도 변경시킨다는 내용이다.
예를 들어보면 어떤 주제 S에 대해 Observer O1, O2 를 만든다고 하면
Observer라는 인터페이스가 정의되고 O1,O2는 Observer 인터페이스를 구현한다.
이 인터페이스는 update()라는 메소드를 가지고 있다고 하면
S클래스는 내부적으로
Oberver인터페이스를 등록하는 메소드,
삭제하는 메소드,
등록된 Observer들을 변경시키는(Observer인터페이스에서 정의된 update 메소드를 순차적으로 호출하는)메소드로 구성된다.
O1, O2를 생성하면서 S클래스를 생성시점에 넘겨주고,
생성자에서 S클래스를 받아 인터페이스를 등록하는 메소드에 O1, O2를 등록한다.
이렇게 O1, O2가 S에 등록되어 있게되면 S에서 변경사항이 발생할때 등록된 Observer들의 update 메소드를 호출하여 observer에서도 변경이 일어날 수 있게 한다.
이런 패턴은 java sdk에 이미 구현되어 있는데,
java.util.Observerable과
java.util.Observer 이다.
Observerable클래스는 extends 하여 사용하며 S의 역할을 하게 된다.
내부적으로 정의된
addOberver(Observer A) // Observer등록하는 메소드
notifyObservers() // 등록된 Observer들의 update 값을 호출한다.
등을 활용하여 쉽게 사용할 수 있다.
Observer에서 정의된 update메소드에서 Observerable의 값을 읽어가면 pull 방식
update 호출 시 파라메터로 값을 넘겨주는 push방식등이 있으며 주로 pull 방식을 사용한다.
현재 사용되고 있는 프레임웍에서 Oberver Pattern을 사용하고 있는 부분을 살펴보면
configuration xml에 log에 관련된 정보를 저장하고 있는 상태에서,
(로그를 파일로 쓸것인가 화면으로 쓸 것인가 , 어느 위치에 놓을 것인가 등등)
Observerable을 확장하고 있는 클래스에 Observer를 구현한 log클래스를 등록한 후
configuration의 변경을 적용하기 위해 notifyObservers()를 호출하고 있다.
반응형
'IT' 카테고리의 다른 글
유용한 oracle 쿼리 (partition by 사용법) (0) | 2009.03.31 |
---|---|
ajax로 open api 호출시 에러 -Access to restricted URI denied (0) | 2008.11.14 |
ajax와 javascript를 이용하여 메뉴 구성 (0) | 2008.11.04 |
Recent Comment