[iOS] MVC
개요
MVC는 Model - View - Controller로 구성된 디자인 패턴이다
Model : 애플리케이션의 데이터를 보유, 일반적으로 구조체나 클래스로 선언
View : 화면에 보이는 시각적 요소, 일반적으로 UIView의 서브 클래스
Controller: 모델과 뷰를 조정하는 Object, 일반적으로 UIViewController의 서브 클래스
위 그림을 보면 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라고도 불림
이를 해결하기 위해서는 다른 디자인 패턴을 사용해야 함
예제
[Model]
Question : 질문 데이터 모델
QuestionGroup : Question 모델 배열을 가지고 있는 컨테이너 모델
QuestionGroupData : QuestionGroup를 Extension하여 모델 데이터를 생성
[View]
QuestionView : 보여질 화면
5개의 UILabel, 2개의 UIButton으로 구성
[Controller]
QuestionViewController :
questionGroup : Model
questionView : View
questionView가 이벤트를 받으면 수행해야할 로직들이 모여있음
댓글남기기