👨💻 애플 공식문서를 통해 MVC 대해 정리합니다.
Model-View-Controller 패턴은 몇 가지 기본적인 디자인 패턴들로 구성된 패턴이다. 전통적인 형태의 MVC패턴은 Cocoa에서 사용하는 것과 Controller 그리고 View에 부여된 역할에서 약간의 차이가 있다.
스몰 토크 개념에서 MVC는 Composite, Strategy, Observer 패턴으로 구성되었다. 각 디자인 콘셉트가 어떻게 결합되었는지 알아보자.
# Composite
# Strategy
# Observer
복합 패턴으로서의 전통적인 MVC 패턴을 도식화하면 다음과 같다.
Cocoa 애플리케이션에서의 MVC는 한 가지 개념이 추가되었는데 그것은 View 객체와 Model 객체는 "재사용"이 가능해야 한다는 것이다.
먼저 View부터 보면, View는 애플리케이션의 "look and feel"을 결정하기 때문에 모양과 동작의 일관성이 필수적으로 요구되며 이를 위해서는 재사용성이 높은 객체가 필요하다.
Model은 정의에 따라 특정한 문제의 도메인과 관련된 데이터에 대한 작업을 수행하도록 설계되어야 한다. 동일한 문제 도메인에서 이를 재사용할 수 있도록 구성하는 것이 좋다.
또한 디자인 측면에서도 더 나은 재사용성을 위해 Model과 View를 서로 분리하여 유지하는 것이 유리하다.
복합 패턴으로서의 Cocoa MVC 패턴.
Controller 객체는 Mediator 패턴과 Strategy 패턴을 통합하여 사용한다. 가장 중요한 차이점으로, Model과 View 사이의 데이터 흐름을 양방향으로 조정하며 Model의 상태 변경사항은 Controller를 통해 View 객체에 전달된다.
View는 Command 패턴의 target-action 매커니즘의 구현을 사용한다.
또한 Cocoa MVC 패턴은 위의 이론적인 이유 외에도 보다 실용적인데, 다음 그림을 보자.
Coordinating Controller는 Nib file로 묶인 Mediating Controller를 소유하고 있다.
Mediating Controller는 Mediator 패턴을 구현하는 것 외에도 애플리케이션의 많은 기능들을 구현해야 한다. 그러나 Model 객체에서 상태 변경사항을 보낼 때 Notification을 사용한다면, 그 알림에 대한 등록 및 처리를 하기 위해 커스텀한 View 클래스를 생성해야 한다.
Cocoa MVC 패턴은 Mediating Controller와 View를 Nib file로 묶어 이러한 Data flow를 실용적으로 관리할 수 있다.
이 부분을 정리하면 다음과 같다.
1. Controller를 Coordinating과 Mediating으로 분리한다.
2. 각각의 모든 View에다 Notification 등록을 하는 것은 일일이 custom View를 만들어야하고 불필요한 작업의 반복이 일어나므로 Controller에서 Notification을 등록하고, Controller가 중재자로서 이를 View에다 전달한다.
3. 따라서 그림과 같은 형태가 됨.
애플에서는 애플리케이션 설계 시 odel-View-Controller에 대한 몇 가지 지침을 제공한다.