Observer 패턴이란 (옵저버)?
(Observer) 관찰자
이벤트가 발생하면 각 옵저버는 Notify를 받습니다.
옵저버란?
Observer란?
한마디로 주제(Subject)를 관찰하고 있는 관찰자입니다.
옵저버 패턴(observer pattern)은
객체의 상태 변화를 관찰하는 옵저버(관찰자)들의 목록을
객체에 등록하여 상태 변화가 있을 때마다 notify를 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴입니다.
notify 함수는 관찰 대상이 발행한 메시지 이외에, 옵서버 자신이 생성한 인자값을 전달가능합니다.
각각의 파생 옵서버는 notify 함수를 구현함으로써 이벤트가 발생했을 때 처리할 각자의 동작을 개발자가 작성해야합니다.
옵서버 패턴은 (Model-View-controller, MVC) 패러다임과 자주 결합된다. 옵저버 패턴은 MVC에서 모델과 뷰 사이를 느슨히 연결하기 위해 사용된다.
실제 현실 적용
(Ex: Youtube)
객체의 상태 변화를 관찰하는 옵저버(관찰자)들의 목록을 객체(유튜버)에
등록하여 상태 변화가 있을 때마다 notify를 통해 객체(유튜버)가 직접 목록의 각 옵저버들에게 통지하는 방식입니다.
구현 예시
옵저버 패턴을 구현하는 방법에는 여러가지가 있지만,
대체로 많이하는 방법인 주제(Subject)인터페이스와 옵저버(Observer) 인터페이스가 들어있는 클래스 디자인으로 예시를 들겠습니다.
Subject 인터페이스와 구현체
interface Subject {
registerObserver() // 옵저버 등록
removeObserver() // 옵저버 삭제
notifyObserver() // 옵저버에게 업데이트 알림
}
class SubjectImpl implements Subject {
registerObserver() { ... }
removeObserver() { ... }
notifyObserver() { ... }
getState() // 주제 객체는 상태를 설정하고 알기위한 겟터,셋터가 있을 수 있다.
setState()
}
옵저버 인터페이스와 구현체
interface Observer{ // 옵저버가 될 객체에서는 반드시 Observer 인터페이스를 구현해야함.
update() // 주제의 상태가 바뀌었을때 호출됨
}
class ObserverImpl implements Observer {
update() {
// 주제가 업데이트 될 때 해야하는 일
}
}
옵저버에서 update()메소드를 통해 주제의 state를 전달받긴 받고
실제 state데이터는 주제(Subject)에 있습니다.
마무리
1. Observer
추상화된 통보 대상
2. Youtube Subscribers(ObserverImplement)
Observer를 implements함으로써 구체적인 통보 대상이 됨
3. Subject
주제에 관심이 있는 대상 객체들을 관리
4. SubjectImplement
Subject를 extends함으로써 구체적인 통보 대상을 직접 참조하지 않아도 됨
이렇게 Observer 패턴을 이용하면 SubjectImplement클래스의 코드를 변경하지 않고도 새로운 관심 클래스 및 객체를 추가/제거하는 것이 가능합니다.
0 댓글