SW/디자인 패턴

옵저버 디자인 패턴 : 정의, 구조, 개념은 무엇일까?

얇은생각 2019. 9. 8. 07:30
반응형

의도

- 개체 간의 일대다 종속성을 정의하여 하나의 개체 상태가 변경되면 모든 종속성이 자동으로 통지되고 업데이트되도록 합니다.

- Subject 추상화에 코어 구성 요소를 캡슐화하며, 변수 구성 요소를 관찰자 계층에 캡슐화합니다.

- Model-View-Controller의 "View" 부분입니다.




문제

대규모 단일 설계는 확장성이 좋지 않으며 새로운 그래핑 또는 모니터링 요구 사항이 부과됩니다.




논의

데이터 모델 또는 비즈니스 논리의 "keeper"인 개체를 정의합니다. 모든 "view" 기능을 위임하여 Observer 개체를 분리하고 구분합니다. Observer는 작성 시 Subject에 직접 등록합니다. Subject가 변경될 때마다 등록된 모든 관찰자에게 브로드캐스트되며, 각 Observer는 대상 상태의 해당 하위 집합에 대해 모니터링을 요청합니다.


따라서 컴파일 시 정적으로 지정되는 대신 "view" 개체의 수와 "type"을 동적으로 구성할 수 있습니다.


위에서 설명한 프로토콜은 "pull" 상호 작용 모델을 지정합니다. 모든 Observer로 변경된 Subject를 "pushing"하는 대신, 각 Observer는 대상으로부터 특정 "window of interest"을 "pull"하는 책임이 있습니다. "push" 모델은 재사용을 저해하지만 "pull" 모델은 효율성이 떨어집니다.


논의되지만 설계자의 재량에 맡겨진 문제에는 이벤트 압축 실행, 단일 Observer가 여러 Subject를 모니터링하도록 하고, Subject가 Subject에게 이를 통지하도록 하는 것이 포함됩니다.


Observer 패턴은 Model-View-Controller 아키텍처의 주요 부분을 차지합니다.




구조

옵저버 디자인 패턴 : 정의, 구조, 개념은 무엇일까?


Subject는 핵심 추상화를 나타냅니다. Observer는 변수 추상화를 나타냅니다. Subject가 Observer 개체에게 작업을 수행하라는 메시지를 보냅니다. 각 관찰자는 필요에 따라 Subject를 다시 호출할 수 있습니다.




Example

옵저버 디자인 패턴 : 정의, 구조, 개념은 무엇일까?

Observer는 한 개체의 상태가 변경되면 다른 개체에 자동으로 통지되고 업데이트되도록 일대다 관계를 정의합니다. 경매는 이 패턴을 보여줍니다. 각 입찰자는 입찰 표시에 사용되는 번호의 패들을 가지고 있습니다. 경매인은 입찰에 착수하고, 입찰에 응하기 위해 번호패를 들어올리면 "observes"합니다. 입찰의 수락은 신규 입찰 형식으로 모든 입찰자에게 브로드캐스트되는 입찰 가격을 변경합니다.




체크리스트

- 핵심(또는 독립) 기능과 옵션(또는 종속) 기능을 구분합니다.

- "대상" 추상화를 사용하여 독립적 기능을 모델링합니다.

- 종속 기능을 "observer" 계층으로 모델링합니다.

- 피사체는 Observer 기본 클래스에만 결합됩니다.

- 클라이언트는 Observer의 수와 유형을 구성합니다.

- 관찰자는 subject에 등록합니다.

- Subject는 등록된 모든 관찰자에게 이벤트를 브로드캐스트합니다.

- Subject는 Observer에서 정보를 "push"하거나 관찰자가 피사체로부터 필요한 정보를 "끌어낼" 수 있습니다.




중요 규칙

- 책임, 명령, Mediator 및 관찰자 체인은 송신자와 수신자를 분리하는 방법을 다루지만 서로 다른 트레이드오프를 사용합니다. 책임 체인은 송신자 요청을 수신자 체인을 따라 전달합니다. 명령은 일반적으로 하위 클래스와 보낸 사람-수신자 연결을 지정합니다. 중재자는 송신자와 수신자가 서로 간접적으로 참조하도록 합니다. Observer는 런타임에 여러 수신기를 구성할 수 있는 매우 분리된 인터페이스를 정의합니다.

Mediator와 옵서버는 경쟁 패턴입니다. 두 개체 간의 차이점은 Observer가 "observer"와 "subject" 개체를 도입하여 통신을 배포하는 반면, Mediator 개체는 다른 개체 간의 통신을 캡슐화한다는 것입니다. 재사용 가능한 관찰자와 Subject를 만드는 것이 재사용 가능한 Mediator를 만드는 것보다 쉽다는 것을 알 수 있습니다.

- 반면, Mediator는 Observer를 활용하여 동적으로 동료들을 등록하고 그들과 통신할 수 있습니다.

반응형