1. Model
- Model 객체는 앱에 관련된 데이터를 캡슐화하고 해당 데이터를 조작하고 처리하는 논리 및 계산을 정의한다.
- App의 What을 담당
※ UI와 독립되어 있다.
2. View
- View 객체는 사용자가 볼 수 있는 앱의 객체이다.
- View 객체는 앱의 Model 객체의 데이터를 표시하고 해당 데이터를 수정할 수 있도록 하는 것
- 수정할 수 있도록 하는 것이지만 Model 객체와는 분리되어야 함.
- 이유는 재사용하고 재구성하기 때문에 앱 간의 일관성을 제공해야 하기 때문이다.
- Controller의 통제를 받는다.
3. Controller
- Controller 객체는 하나 이상의 Model / View 객체 사이에서 중개자 역할을 한다.
- App에 대한 설정 및 조정 작업을 수행하고 다른 객체의 생명 주기를 관리한다.
- 어떻게 화면에 표시할 것인지에 대해 관심을 가진다.
- App의 How를 담당
Communication
- Model
- 데이터를 만들거나 수정하는 View Layer의 사용자 작업은 Controller 객체를 통해 전달되어 Model 객체를 생성하거나 업데이트한다.
- Model 객체가 변경되면(예: 네트워크 연결을 통해 새 데이터가 수신됨) 적절한 View 객체를 업데이트하는 Controller 객체에 대해 통보한다.
- View
- Controller 객체를 통해 Model 데이터의 변화를 전달받는다.
- 사용자에 의한 변경 사항(예: 텍스트 필드에 입력된 텍스트)을 Controller 객체를 통해 응용 프로그램의 Model 객체에 전달한다.
- Controller
- View 객체에서 만든 사용자 Action을 확인하고 변경되거나 새로운 데이터를 Model Layer에 전달한다.
- Model 객체가 변경되면 Controller 객체는 새로운 Model 데이터를 View 객체에 전달하여 표시할 수 있다.
서로의 관계
- Model과 Controller
- Controller는 Model에 직접적으로 접근할 수 있지만, Model은 Controller에 Notification & KVO(Key-Value Observing) 방식을 통해 Model의 변화를 알림
- Model과 View
- Model은 UI에 독립적이며 View와 소통할 수 없다. 물론 View 또한 Model과 소통이 불가능하다.
- View와 Controller
- Controller는 View에 대해 outlet을 이용해 View에게 직접적으로 접근할 수 있다. (Ctrl + Drag로 할 수 있음)
- View는 Controller에게 구조적으로 미리 정해진 방식으로 Controller에게 행위에 대한 요청(delegate)와 데이터에 대한 요청 (data source)를 할 수 있다. 또한, action(View) - target (Controller)의 구조로 사용자의 action에 따라 필요한 함수를 호출할 수 있다.
출처 1: Apple 공식 문서
Model-View-Controller
Retired Document Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid. Model-View-Controller The Model-View-Controller (MVC) design pattern assigns objects in an ap
developer.apple.com
출처 2 : Developing iOS 11 Apps with Swift by Stanford 2번째 강의 MVC
Developing iOS 11 Apps with Swift - Free Course by Stanford on iTunes U
Developing iOS 11 Apps with Swift, Stanford, Computer Science, iTunes U, educational content, iTunes U
itunes.apple.com
'프로그래밍 > iOS' 카테고리의 다른 글
Threading Programming Guide (1) - 소개 (0) | 2020.12.21 |
---|---|
UICollectionView에 대해 알아보자. (0) | 2020.12.20 |
Alamofire Framework 사용하기 (0) | 2020.12.20 |
Github OAuth로 로그인하기 (0) | 2020.12.20 |
구조체(Struct) 클래스(Class)의 공통점과 차이점 (0) | 2020.12.20 |