[iOS] MVC

개요

MVC는 Model - View - Controller로 구성된 디자인 패턴이다

Model : 애플리케이션의 데이터를 보유, 일반적으로 구조체나 클래스로 선언

View : 화면에 보이는 시각적 요소, 일반적으로 UIView의 서브 클래스

Controller: 모델과 뷰를 조정하는 Object, 일반적으로 UIViewController의 서브 클래스

MVC_Diagram.png

위 그림을 보면 Controller는 Model, View에 대해 강한 참조의 프로퍼티를 가질 수 있기 때문에

직접 접근이 가능함

반면 Model, View는 Controller에 대해 강한 참조를 가지면 안된다

순환 참조가 발생

Model은 프로퍼티 옵저빙을 통해 Controller와 통신하고 View는 Action같은 이벤트 발생을 Controller에게

알려주어 통신을 함

프로퍼티 옵저빙, Action으로 여러 Controller에서 Model, View를 재사용할 수 있다

반면 Controller는 로직 즉, View가 전달한 Action에 따라 Model을 어떻게 보여줘야 할지가

구체적이기 때문에 재사용이 어렵다. 따라서 MVC 패턴에서 Model, View는 재사용이 가능하지만 Controller는 재사용하지 않음

주의해야할 점

모든 Object가 Model, View, Controller 카테고리에 딱 들어맞지 않는다

MVC만 사용하면 Controller가 많은 로직을 가지는 경향이 있다.

이로 인해 Controller가 방대하고 거대해질 수 있어 Massive VC라고도 불림

이를 해결하기 위해서는 다른 디자인 패턴을 사용해야 함

예제

[GitHub]

[Model]

Question : 질문 데이터 모델

QuestionGroup : Question 모델 배열을 가지고 있는 컨테이너 모델

QuestionGroupData : QuestionGroup를 Extension하여 모델 데이터를 생성

[View]

QuestionView : 보여질 화면

5개의 UILabel, 2개의 UIButton으로 구성

[Controller]

QuestionViewController :

questionGroup : Model

questionView : View

questionView가 이벤트를 받으면 수행해야할 로직들이 모여있음

댓글남기기