-
[Design Pattern] 옵서버 패턴(Observer Pattern)Software Engineering 2020. 6. 6. 21:51728x90
Observer Pattern
- 어떤 객체에 이벤트가 발생했을 때, 이 객체와 관련된 객체들(옵저버)에게 통지하는 패턴
- 데이터의 변경이 발생했을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보할 때 사용
- 통보 대상 객체의 관리를 Subject클래스와 Observer인터페이스로 일반화함
- 데이터 변경을 통보하는 클래스(ConcreteSubject)는 통보 대상 클래스나 객체(ConcreteObserver)에 대한 의존성을 없앨 수 있음
- 결과적으로 옵서버 패턴은 통보 대상 클래스나 대상 객체(ConcreteObserver)의 변경에도 ConcreteSubject 클래스를 수정 없이 그대로 사용할 수 있음
역할이 수행하는 작업
- 데이터의 변경을 통보 받는 인터페이스
- Subject에서는 Observer 인터페이스의 update 메서드를 호출함으로써 ConcreteSubject의 데이터 변경을 ConcreteObserver에게 통보
Observer
- ConcreteObserver 객체를 관리하는 클래스
- Observer 인터페이스를 참조해서 ConcreteObserver를 관리하므로 ConcreteObserver의 변화에 독립적임
Subject
- 변경 관리 대상이 되는 데이터가 있는 클래스
- 데이터 변경을 위한 setState 메서드가 있으며 setState에서는 자신의 데이터인 subjectState를 변경함
- Subject클래스에게서 상속받은 notifyObservers 메서드를 호출해서 ConcreteObserver 객체에 변경을 통보
ConcreteSubject
- ConcreteSubject의 변경을 통보 받는 클래스
- Observer 인터페이스의 update 메서드를 구현함으로써 변경을 통보 받음
- 변경된 데이터는 ConcreteSubject의 getState 메서드를 호출함으로써 변경된 데이터를 조회
ConcreteObserver
728x90'Software Engineering' 카테고리의 다른 글
[Design Pattern] 템플릿 메서드 패턴(Template Method Pattern) (0) 2020.06.08 [Design Pattern] 데커레이터 패턴(Decorator Pattern) (0) 2020.06.07 [Design Pattern] 커맨드 패턴(Command Pattern) (0) 2020.06.01 [Design Pattern] 스테이트 패턴(State Pattern) (0) 2020.05.31 [Design Pattern] 싱글턴 패턴(Singleton Pattern) (0) 2020.05.29