복습
옵저버 패턴(Observer Pattern) 본문
옵저버 패턴이란?
객체의 상태 변화를 관찰하는 옵저버(관찰자)들의 목록을 객체에 등록하여
상태 변화가 있을 때마다 notify를 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴
- 유튜브로 예를 들면 해당 채널을 구독하고 있는 구독자들에게는 영상이 업로드 되면 알림이 가지만,
- 구독하고 있지 않은 사람에게는 알림이 가지않는다.
- 따라서 구독하지 않은 사람은 영상이 업로드 되었는지 계속 확인해야 한다.(폴링)
- 폴링이란?
- 하나의 장치 또는 프로그램이 다른 장치 또는 프로그램의 상태를 주기적으로 검사하여 작업을 처리하는 방식
옵저버 패턴 클래스 다이어그램
- 관찰 대상인 Subject 인터페이스, 관찰을 하는 Observer 인터페이스
- 각 인터페이스를 구현한 ConcreteSubject(주제 객체), ConcreteObserver(옵저버) 클래스가 있다.
- 주제 객체는 옵저버를 등록 및 취소를 하고 상태 변경을 알린다.
- 옵저버는 알림을 받아 로직을 처리한다.
옵저버 패턴 특징
- 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 알리고 갱신하는 1:N 관계이다.
- 주제와 옵저버가 느슨하게 결합되어 있다.
옵저버 패턴 구현
Youtuber 인터페이스(주제)
public interface Youtuber {
public void register(Observer subscriber);
public void notifySubscribers();
public void removeSubscriber(Observer subscriber);
}
Youtuber1 클래스
public class Youtuber1 implements Youtuber{
static List<Observer> subscribers = new ArrayList<>();
@Override
public void register(Observer subscriber){
subscribers.add(subscriber);
}
@Override
public void notifySubscribers(){
for (Observer subscriber : subscribers) {
subscriber.update();
}
}
@Override
public void removeSubscriber(Observer subscriber) {
subscribers.remove(subscriber);
}
}
Observer(인터페이스)
public interface Observer {
public void update();
}
Subscriber1, Subscriber2 클래스(옵저버)
public class Subscriber1 implements Observer{
@Override
public void update() {
System.out.println("Subscriber1 Play Youtube!");
}
}
public class Subscriber2 implements Observer {
@Override
public void update() {
System.out.println("Subscriber2 Play Youtube!");
}
}
옵저버 테스트
public class testObserver {
public static void main(String[] args) {
Observer sub1 = new Subscriber1();
Observer sub2 = new Subscriber2();
Youtuber youtuber = new Youtuber1();
youtuber.register(sub1);
youtuber.notifySubscribers();
System.out.println();
youtuber.register(sub2);
youtuber.notifySubscribers();
}
}
옵저버 패턴 언제 사용할까?
- 외부에서 발생한 이벤트에 대한 응답(Swing, Android 등 UI 관련된 곳)
- MVC 패턴
MVC 패턴과 옵저버 패턴
- 모델(Model)은 사용자의 모든 데이터를 가지고 있으며, 뷰나 컨트롤러에 대한 정보를 알지 못한다.
- 모델은 변경이 일어나면 이를 컨트롤러에 알려 뷰에게 알린다.
- 뷰(View)는 모델이나 컨트롤러에 대한 정보를 알지 못한다.
- 즉, 모델에 변경이 일어나면 이를 구독하고 있는 뷰들에게 알린다.(옵저버 패턴)
참고
https://huimang2.github.io/design-pattern/mvc-pattern.html
MVC 패턴
MVC 패턴이란? MVC 패턴(Model-View-Controller Pattern)은 어플리케이션을 개발함에 있어서 컴포넌트를 모델(Model), 뷰(View), 컨트롤러(Controller)로 역할을 나누어 개발하는 디자인 패턴 즉, 설계 방식을 말합
huimang2.github.io
옵저버 패턴(Observer Pattern)
옵저버 패턴(Observer Pattern) 한객체의 상태가바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다. 즉, A 오브젝트가
www.crocus.co.kr
'CS > Design Pattern' 카테고리의 다른 글
프로토타입 패턴(Prototype Pattern) (0) | 2023.11.02 |
---|---|
커맨드 패턴(Command Pattern) (0) | 2023.04.05 |
노출 모듈 패턴(Revealing Module Pattern) (0) | 2023.04.05 |