Swift/기술 면접

MVC 구조에 대해 블록 그림을 그리고, 각 역할과 흐름을 설명하시오.

수줌이 2022. 5. 1. 22:38

MVC 패턴이란?

  • Model(모델), View(뷰), Controller(컨트롤러)

 


Traditional MVC

Traditional MVC

  • 다이어그램을 보면 Model, View 그리고 Controller, 이 세 요소가 서로 강하게 연결되어 있음을 알 수 있다.
  • Model에서는 애플리케이션에서 사용할 데이터들을 관리하고, View유저 인터페이스를 표현 및 관리한다.
  • Controller는 View와 Model의 다리 역할을 해 View의 입력을 Model이 반영하고, Model의 변화를 View에 갱신하는 역할을 한다.
  • 강하게 연결된 셋은 독립성이 낮기 때문에 이들 각각의 재사용성은 굉장히 떨어지며, 그렇기 때문에 현재 iOS 개발에는 전통적인 MVC 아키텍쳐는 맞지 않다고 볼 수 있다.

 


Apple's MVC

  • 위의 이유로 애플에서는 새로운 MVC 아키텍쳐를 제시했다.

Cocoa MVC

  • 기존 MVC 패턴과는 다르다.
  • ControllerView와 Model의 중재자 역할을 함으로써 View와 Model에 독립성을 주었다.
하지만
Controller의 역할을 수행하는 UIViewController의 이름에서도 알 수 있듯이, Controller가 View를 포함하는 것은 물론, View의 Life Cycle까지 관리하기 때문에 View와 Controller를 분리하기 어렵고, 재사용도 어렵다. 또한 테스트도 불가능하다. ViewController가 너무 많은 역할을 하기 때문에 MVC를 Massive View Controller라고 부르기도 한다.

  • 그러므로 실제 다이어그램은 다음과 같은 흐름을 갖게 된다.

Reality Cocoa MVC

  • View와 Controller가 강하게 연결되어 있어 View Controller가 거의 모든 일을 한다.
좋은 아키텍쳐의 기준에 얼마나 부합하는가?
1. Distribution
   Model과 View가 독립되었지만, View와 Controller가 너무 밀접하게 연관되어있기 때문에 독립성을 확보하지 못한다.
2. Testability
   View와 Controller가 강하게 연결되어 있기 때문에, 오로지 Model만 테스팅을 진행할 수 있다.
3. Ease of use
   다른 패턴들에 비해 코드 길이가 적고, 친숙한 아키텍처이기 때문에 개발자들이 쉽게 유지보수 할 수 있다.
  • Cocoa MVC 패턴은 개발 진행 속도에 있어서는 가장 빠르다고 할 수 있다.
  • 따라서 아키텍처가 중요하지 않을 때는 선택할만한 패턴이지만, 나중에 유지보수가 어렵다는 문제가 있다.

 


정리

Q. MVC 구조에 대해 블록 그림을 그리고, 각 역할과 흐름을 설명하시오.

A. 모델, 뷰, 컨트롤러 패턴으로, 모델에서는 애플리케이션에서 사용할 데이터를 관리하고 뷰에서는 유저 인터페이스를 표현 및 관리한다. 컨트롤러러는 View와 Model의 중재자 역할을 함으로써 View와 Model에 독립성을 주었다. 하지만 Controller의 역할을 수행하는 UIViewController의 이름에서도 알 수 있듯이, Controller가 View를 포함하는 것은 물론, View의 Life Cycle까지 관리하기 때문에 View와 Controller를 분리하기 어렵고, 재사용도 어렵다. 또한 테스트도 불가능하다. 

View와 Controller가 강하게 연결되어 있어 View Controller가 거의 모든 일을 한다. ViewController가 너무 많은 역할을 하기 때문에 MVC를 Massive View Controller라고 부르기도 한다.


참고