MVC(Model-View-Controller) 디자인 패턴
은 애플리케이션의 객체를 Model
, View
, Controller
의 세 가지 역할 중 하나의 역할로 할당합니다.
이 패턴은 애플리케이션 내에서 객체가 수행하는 역할 뿐만 아니라 객체가 서로 통신하는 방식을 정의합니다.
세 가지 유형의 객체는 각각 추상적인 경계에 의해 다른 객체와 구분되며, 그 경계를 넘어 다른 유형의 객체와 통신합니다.
애플리케이션 내의 특정 MVC 유형을 한데 모아 레이어(예: 모델 레이어)라고도 합니다.
데이터 캡슐화, 데이터 조작, 처리, 계산 로직을 정의
하나의 모델 객체는 일대일
혹은 일대다
대응관계를 맺을 수 있다.
Model
객체는 View
객체에 직접적으로 연결되어서는 안된다.
(Controller
를 통해 간접적으로 연결)
모델 예:
캐릭터 정보 (닉네임, 레벨, 스텟 등 ...)
전화번호부의 연락처
즉, 사용자 인터페이스나 표시 문제와 관련이 있어서는 안 됩니다 !
애플리케이션 내에서 사용자와 직접 상호작용하는 객체 (화면)
Model
객체의 데이터를 보여주고, 사용자로부터 이벤트를 받아 처리한다.
Controller
객체는 하나 이상의 View
객체, 하나 이상의 Model
객체 사이의 코디네이터 혹은 중개자 역할을 한다.
Model - View - Controller 디자인 패턴
에서 Controller
객체는 View
객체에서 일어난 동작 및 의도를 해석하며, 신규 혹은 변경된 데이터를 Model
객체에 전달한다.
iOS 환경의 Cocoa Touch 프레임워크는 Coordinating Controllers
, View Controller
의 두 가지 기본 컨트롤러 유형을 제공합니다.
코디네이팅 컨트롤러는 애플리케이션 전체 혹은 일부 기능을 감독하고 관리 합니다. 애플리케이션별로 다른 로직이 각 애플리케이션에 주입(injected)되는 장소라고 할 수 있으며, 그 기능은 다음과 같습니다.
델리게이션(delegation) 메시지에 응답하고 알림(notifications)을 관리.
사용자가 버튼과 같은 컨트롤을 탭 하거나 클릭함에 따라 전송되는 동작 메시지(action message)에 응답.
객체 간의 연결을 확립하거나 기타 설정 작업을 수행. (예: 애플리케이션을 시작하는 경우)
소유한(owned) 객체의 생명 주기 관리.
iOS 애플리케이션에서는 뷰 컨트롤러가 코디네이팅 컨트롤러의 역할을 겸하는 경우가 많습니다.
iOS의 뷰 컨트롤러는 UIViewController 서브클래스의 인스턴스입니다.
UIKit
에서 View Controller
는 콘텐츠를 화면에 표시하는 View
를 관리하며, 해당 View
에 대한
참조(reference)를 유지하고, 뷰의 표현(presentation) 및 후속 View
로의 전환(transition)을 관리합니다.
UIKit
은 UITableViewController
와 같은, UIViewController
의 여러 특수 목적 서브클래스를 제공합니다.
기기의 방향(orientation)이 바뀔 때 뷰를 회전시킵니다.