MVC 패턴은 애플에서 기본적으로 지원하는 디자인 패턴으로, Model + View + Controller 구조의 아키텍처 패턴을 말합니다.
각 영역에 대해 알아보장.
Model
은 앱의 데이터와 비즈니스 로직을 갖고 있다.
View
는 사용자에게 데이터를 보여주거나 UI를 담당한다.
Controller
는 Model
과 View
의 중간다리 역할로 View로부터 사용자의 action을 받아 Model에게 어떤 작업을 해야 하는지 알려주거나, Model의 데이터 변화를 View에게 전달하여 View를 어떻게 업데이트할지 알려준다.
Controller 는 Model 과 View 에 직접 소통할 수 있지만 Model 과 View 는 Controller에 직접적으로 알릴 수 없다.
그러면 Model 의 데이터가 변경되거나, View 에서 사용자의 action 을 Controller 에게 알릴 쑤 있으까?
Controller는 View에서 발생할 수 있는 action에 대한 target을 만들어둔다.
그래서 View에서 유저의 action이 발생할 경우 Controller에 있는 target이 이를 받아들이고 작업을 수행한다.
또한 View는 delegate 패턴의 delegate와 datasource를 이용하여 Controller에게 어떤 작업을 수행해야하는지 알리기도 한다.
대표적인 예로 UITableView의 UITableViewDelegate와 UITableViewDatasource를 들 수 있다
Model은 Observer 패턴의 Notification
과 KVO(Key Value Observation)
를 통해 Controller에게 알린다.
Notification
과 KVO
는 일을 수행하는 객체(publisher)가 진행하던 작업이 끝나면 자신들을 구독 중인 객체들(subscribers)에게 신호를 보내는 방식이다.
간단하게 설명하자면, 작업이 완료됐을 때 라디오 센터에서 전파를 보내는 것처럼 Controller에게 신호를 보낸다.