Model과 View의 연결 고리 같은 역할 (적절한 시간 내에 Model과 View 사이에서 데이터 전달하는 역할 / View로부터 사용자의 행동을 받아와서 Model에게 전달하는 역할 / Model에서의 데이터 변화를 감지한 후 View로 전달하여 View가 어떤 식으로 보여줄지 알려주는 역할) 을 한다.
Controller는 Model과 View에게 직접 전달이 가능하지만, Model과 View는 Controller에게 직접 전달이 불가능하다.
View에서 사용자의 행동이 발생했을 때는 View에서 발생할 수 있는 행동을 미리 Controller에 target으로 만들어두고 target대로 실행한다. 또, View는 delegate와 datasource를 통해 Controller에게 어떤 작업을 수행할지 알려주기도 한다.
Controller가 Model의 데이터 변화를 감지하는 것은 Notification과 KVO (Key Value Observation) 를 통해 이루어지는데, Notification과 KVO는 작업 중이던 객체 (publisher) 가 작업 완료하면 구독 중이던 객체 (subscriber) 들에게 신호를 보낸다.
MVC의 장점
다른 패턴에 비해 코드량이 적다.
애플에서 기본적으로 제공하는 패턴이기 때문에 접근이 용이하다.
개발 속도가 빠르기 때문에 규모가 작은 프로젝트에서 사용하기 좋다.
UIKit
MVC 디자인 패턴에 기반을 둔다.
앱의 핵심 요소 (시스템과 상호 작용하는 것 / 앱의 주요 기능 루프를 실행하는 것 / 화면 상에 보여주는 것) 를 제공한다.
디스크 기반 파일을 포함하고 있는 데이터 구조를 조직하기 위해 UIDocument를 제공한다.