본문 바로가기

GoF의 디자인 패턴/1. 서론

1.2 스몰토크 MVC를 사용한 디자인 패턴

MVC 구성요소

  • 모델 : 응용프로그램 객체
  • : 스크린에 모델을 디스플레이하는 방법
  • 컨트롤러 : 사용자 인터페이스가 사용자 입력에 반응하는 방법

 

원래는 하나의 객체인 것을 3가지로 분리 -> 유연성 + 재사용성 증대가 목적

 

<-> 모델 간의 등록(subscribe)/통지(notify) 프로토콜

  • 구성 요소가 독립성을 갖도록 변경(종속성을 없앰)

 

뷰는 반드시 모델의 state(상태) 반영하여 모델을 디스플레이한다는 보장(guarantee)

  • 모델의 데이터가 변경 -> 모델이 뷰에게 nofity
  • 뷰는 스스로 자신 외형을 변경

 

이런 디자인을 통해 모델을 여러가지 뷰로 표현 가능

  • /모델이 하나의 객체였다면, 모델에 여러가지 뷰를 제공하기 위해 데이터는 같고 인스턴스는 다른 3가지의 모델이 필요했다.(매우 낭비)

 

모델에서 떼어내는 이런 설계 방법

-> 일반적인 문제에도 적용 가능하다.

 

  1. 객체에서 변경이 일어나면
  2. 변경을 다른 객체들에 반영하기 위한 별도의 객체를 만든다.
  3. 변경이 일어난 객체는 변경 반영이 필요한 다른 객체들을 필요가 없어진다.
  4. 이런 설계를 일반화한 것이 감시자 패턴이다!!!

 

 

============================================================

 

 

MVC 뷰를 중첩시킬 있다.

예를 들면, 버튼의 제어판은 여러 개의 버튼을 포함하는 복잡한 뷰로 구현할 있다. MVC CompositeView 클래스로  중첩된 뷰를 지원하고, CompositeView View 서브클래스이다.

  • CompositeView -> View UpCasting 가능하다.(Derived->Base)

, 복합 객체는 일반 객체가 사용되는 곳이면 동일하게 사용할 있다.

 

복합 뷰를 마치 하나의 단일 뷰인 것처럼 사용하려는 설계 개념, 역시 일반적인 문제에 적용이 가능하다. 일반적으로 단일 객체처럼 복합 객체를 사용하고 싶을 때가 많은데, 이런 일반적 설계를 담는 것이 복합체 패턴 이다.

 

 

============================================================

 

 

MVC 뷰의 변경 없이 사용자 입력에 대한 뷰의 반응 방법을 변경할 있다.

명령 , 팝업 메뉴, 키보드 등으로도 변경할 있다. MVC에서는 Controller 객체를 이용하여 사용자 입력에 대한 반응 방법을 Encapsulation(캡슐화)한다. 컨트롤러의 클래스 계층을 통해서 기존 방식과 다른 방식을 새로운 컨트롤러로 정의하게 한다.

 

어떤 반응 방법을 구현하기 위해 View Controller 서브클래스의 인스턴스를 사용한다고 했을

  • 다른 반응 방법을 구현할려면 현재의 Controller 인스턴스를 다른 종류의 Controller 인스턴스로 교체만 하면 된다.
  • 이런 방법을 사용하면 런타임 중에도 사용자 입력에 반응하는 뷰의 방식을 변경할 있다.

 

<->컨트롤러 관계는 전략 패턴 예이다.

  • 전략 패턴은 어떠한 알고리즘을 알고리즘을 표현하는 객체로 대체(정적이든 동적이든)하고자 유용하다.

 

 

 

'GoF의 디자인 패턴 > 1. 서론' 카테고리의 다른 글

1.5 카탈로그 조직화하기  (0) 2021.11.11
1.3 디자인 패턴 기술하기  (0) 2021.11.11
1.1 디자인 패턴이란?  (0) 2021.11.11