[iOS] MVC

Eugenie·2022년 5월 12일
0

[iOS] Architecture

목록 보기
2/5

MVC [ Model View Controller ]

애플이 제시한 MVC 방식은
Cocoa MVC 라고 한다.

Controller 는
View 와 Model 의 중재자로,
View 와 Model 의 직접적인 연결을 막는다.

Cocoa MVC 에서 Controller 의 역할은
UIViewController 가 담당한다.

UIViewController 는
View 를 소유하며 View 의 생명주기와 강하게 연결된다.

View 와 Controller 의 분리가 쉽지 않고,
Controller 의 재사용이 어려워지며
연관되어 있는 View 의 재사용도 어려워진다.

View 와 Controller 의 분리가 쉽지 않기 때문에
테스트가 어렵다.

결과적으로 독립적인 부분은 Model 밖에 없다.

Model

애플리케이션과 관련된 데이터를 캡슐화하고,
해당 데이터를 조작하고 처리하는 로직과 계산을 정의한다.

하나의 모델 객체는 다른 모델 객체와 일대일 또는 일대다 대응관계를 맺을 수 있다.

모델 객체는 데이터를 사용자에게 제공하거나
사용자가 이를 편집할 수 있는 뷰 객체에 명시적으로 연결되어서는 안된다.

View

뷰 객체는 애플리케이션 내에서 사용자가 볼 수 있는 객체를 말한다.

뷰 객체의 주된 목적은 애플리케이션의 모델 객체의 데이터를 보여주고
해당 데이터를 편집할 수 있도록 하는 것이다.

Controller

컨트롤러 객체는 하나 이상의 애플리케이션 뷰 객체와
하나 이상의 모델 객체 사이의 중재자 역할을 한다.

사용자가 버튼을 탭/클릭하거나 텍스트 필드에서 텍스트를 입력하는 것처럼,
뷰 객체에서 이루어진 사용자 동작 및 의도를 해석하며,
신규 혹은 변경된 데이터를 모델 객체에 전달한다.

컨트롤러 객체는 애플리케이션의 설정 및 조정 작업을 수행할 수도 있으며,
다른 객체들의 생애주기를 관리하기도 한다.

iOS 환경의 Cocoa Touch 프레임워크는
코디네이팅 컨트롤러, 뷰 컨트롤러의 두 가지 기본 컨트롤러 유형을 제공한다.

Coordinating Controllers

애플리케이션의 전체 혹은 일부 기능을 감독하고 관리한다.
애플리케이션별로 다른 로직이 각 애플리케이션에 주입되는 장소라고 할 수 있다.

🔸 델리게이션 메시지에 응답하고 알림을 관리
🔸 사용자가 버튼과 같은 컨트롤을 탭 하거나 클릭함에 따라 전송되는 동작 메시지에 응답
🔸 객체 간의 연결을 확립하거나 기타 설정 작업을 수행
🔸 소유한 객체의 생명주기 관리

❗️ iOS 애플리케이션에서는 뷰 컨트롤러가 코디네이팅 컨트롤러의 역할을 겸하는 경우가 많다.

View Controller

UIKit 에서 뷰 컨트롤러는 콘텐츠를 화면에 표시하는 뷰를 관리하며,
해당 뷰에 대한 참조를 유지하고, 뷰의 프레젠테이션 및 후속 뷰로의 전환을 관리한다.

모달 뷰를 표시하고 메모리 부족 경고에 응답하며
기기의 방향이 바뀔 때 뷰를 회전시킨다.

iOS 의 뷰 컨트롤러는 UIViewController 서브클래스의 인스턴스이다.
UIKit 은 UITableViewController 와 같은
UIViewController 의 여러 특수목적 서브클래스를 제공한다.

뷰 컨트롤러는 여러가지 프레임워크 객체에 대한 델리게이트 혹은 데이터 소스 객체인 경우가 많다.


이전 글에서 언급한 👍🏻 Good Architecture 기준에
얼마나 부합하는지 분석해 보았다.

Distribution

독립적인 부분은 Model 밖에 없다.
View 와 Controller 는 강하게 연결되어 있다.

Testablity

독립적인 Model 에 해당하는 부분은 테스트가 가능하다.
분리하기가 쉽지 않은 View 와 Controller 는
테스트가 어렵다.

Ease of Use

가장 적은 양의 코드를 필요로 하기 때문에
경험이 적은 개발자들도 쉽게 유지보수를 할 수 있다.

❗️ 이해하기 어렵지 않기 때문에, 사용하기 쉽지만 경제성이 떨어진다.

📚 Reference
iOS Architecture Patterns
iOS Architecture (iOS 아키텍처 패턴) (1) - MVC
boostcourse - iOS 앱 프로그래밍

profile
🌱 iOS developer

0개의 댓글