MVC 구조에 대해 블록 그림을 그리고, 각 역할과 흐름을 설명하시오.
2022. 5. 1. 22:38ㆍSwift/기술 면접
MVC 패턴이란?
Model(모델),View(뷰),Controller(컨트롤러)
Traditional MVC

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

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

- 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라고 부르기도 한다.
참고
'Swift > 기술 면접' 카테고리의 다른 글
| Instance 메서드와 Type 메서드의 차이점을 설명하시오. (0) | 2022.05.08 |
|---|---|
| 스토리보드를 이용했을 때의 장단점을 설명하시오. (0) | 2022.05.08 |
| Struct가 무엇이고 어떻게 사용하는지 설명하시오. (0) | 2022.05.08 |
| Optional이란 무엇인지 설명하시오. (0) | 2022.05.08 |
| Class와 Struct의 차이점에 대해 설명하시오. (0) | 2022.05.02 |