Purpose of Observer Pattern ( 옵저버 패턴의 목적)
aka) Publish / Subscribe model
- Lets one or more objects be notified of state changes in other objects within the system.
- 하나 이상의 개체에 시스템 내의 다른 개체의 상태 변경을 알리기 위해서
Design Principle (디자인원칙)
- loose coupling (서로 거의 모름)
Observer Pattern (옵저버 패턴)
- The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically.
- 옵저버 패턴은 일대다 종속성을 정의하여, 하나의 개체의 상태를 변경하면 종속성이 있는 모두에게 자동으로 통지되고 업데이트된다.
- Observable (Publisher) / Observer (Subscriber) , 신문 구독 서비스로 이해하면 쉬움
- Java의 Official Observable Class를 생각하면 됨
Quiz) Observer 패턴에서 약한 커플링(loose coupling)이 어떻게 달성되는지 간략히 설명하시오.
- Subject Object와 Observer가 서로를 거의 알지 못하지만 상호 작용할 수 있을 때, loose coupling이 달성된 것.
Subject는 Observer가 특정 인터페이스를 구현하는 것만 알고, Subject나 Observer가 변화가 서로 영향을 미치지 않는다. Subject를 변경하지 않고, 언제든지 새로운 유형의 Observer를 추가할 수 있다.
Quiz) Observer 패턴을 사용할 때, Publisher 역할을 수행하는 객체가 여러 개 있을 수 있는가?
- 가능하다. Observer 패턴에 참여하고 있는 복수개의 클래스들이 Publisher의 역할을 할 수 있으며, Subscriber들은 원하는 복수개의 Publisher에 구독 신청을 할 수 있다. 또한 어떤 클래스는 Publisher이면서 다른 Publisher의 Subscriber가 될 수도 있다.
- Example
public class Publisher_A extends Observable implements Observer {
public void update(Observable obs, Object arg) { … }
…
}
Quiz) 다음의 문제를 풀기 위해 적용할 수 있는 패턴의 이름을 쓰시오.
"도메인 로직 레이어(Domain Logic Layer)와 UI(User Interface) 레이어를 분리하여 시스템을 개발하고 있다.
만일 도메인 로직 레이어의 객체들의 상태에 변화가 생기면, 그 사실을 UI 레이어에 있는 다수의 객체들에게 전달하고 싶다. 이때 도메인 로직 레이어의 객체들은 가급적 UI 레이어 객체들에 대한 결합도를 최대한 낮추고 싶다. "
=> Observer Pattern
Quiz) O/X 로 답하시오
- (O) Observer 패턴에서 감시자를 추가할 때 Subject 자체에 코드를 추가하지 않으면서도 확장할 수 있는 것은 OCP를 적용한 예이다.
- (X) Observer 패턴에서 Subject의 상태에 관심을 갖는 새로운 감시자(Observer) 객체를 추가하기 위해서는 Subject class에 코드 수정이 필요하다.
→ Subject를 변경하지 않고, 언제든지 새로운 유형의 Observer를 추가할 수 있다.
본 글은 개인의 S/W 구조설계 역량 강화를 위한 학습 목적으로 정리된 내용입니다.
일부 타/개인 단체에 저작권이 있는 자료를 포함하고 있으므로, 절대 영리 목적으로 사용하실 수 없습니다.
'SW 공부 > Design Patterns' 카테고리의 다른 글
[디자인패턴] Iterator pattern (반복자 패턴) (2) | 2022.08.28 |
---|---|
[디자인패턴] Template method pattern (템플릿 메소드 패턴) (2) | 2022.08.28 |
[디자인패턴] Strategy Pattern(전략패턴) (2) | 2022.08.27 |
GRASP (GENERAL RESPONSIBILITY ASSIGNMENT SOFTWARE PATTERNS) (2) | 2022.08.24 |
SOLID PRINCIPLES (2) | 2022.08.23 |
댓글