MVC 패턴
MVC 패턴이란?
Model-View-Control 라는 뜻으로, 사용자 인터페이스, 데이터 및 논리 제어를 규현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.
M(model) : 데이터와 관련된 처리'만' 하는 부분
V(view) : 사용자에게 보여지는 부분
C(controller) : model과 view를 연결, 즉 데이터와 사용자 인터페이스를 연결하는 부분
사용자가 컨트롤러(Controller)를 조작하면, 컨트롤러는 모델(Model)을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 뷰(View)를 제어해서 사용자에게 전달
결국 "어떻게 나눌 것인가" 에 대한 해답 중 하나이다. 특정한 역할들에 대해 역할분담을 할 때 가이드라인을 제시하는 방법 중 하나가 MVC 패턴이다.
MVC 패턴의 특징
Model
역할
- 데이터 추출, 저장, 삭제, 업데이트 등의 역할을 수행
- 내부 비지니스 로직을 처리하기 위한 역할을 함
규칙
1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
2. 뷰타 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다. (코드에 포함되면 안 된다.)
3. 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.
View
역할
- 사용자에게 보여주는 화면 (사용자 인터페이스)
- 사용자와 상호작용
- 컨트롤러로부터 받은 모델의 결과값을 사용자에게 화면으로 출력하는 일
규칙
1. 모델이 가지고 있는 정보를 따로 저장해서는 안 된다. (정보를 전달만 해야 한다.)
2. 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 한다. (데이터를 받으면 화면에 표시해 주는 역할만 한다.)
3. 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.
Controller
역할
- 데이터와 사용자 인터페이스 요소를 이어 주는 역할
- 모델이 데이터를 어떻게 처리할지 알려 주는 역할
규칙
1. 모델이나 뷰에 대해서 알고 있어야 한다.
2. 모델이나 뷰의 변경을 모니터링 해야 한다.
MVC 패턴의 장단점
장점
- 각 부분은 자신이 맡은 역할만 수행한 후 결과만 전달하게 되어 코드의 결합도를 낮출 수 있다.
- 유지보수 시에도 각 기능별 코드만 수정하여 쉽게 관리가 가능하다.
- 기능별로 코드를 분리하여 하나의 파일에 코드가 모이는 것을 방지하여 코드의 가독성, 확장성, 재사용성이 증가한다.
단점
- View가 Controller를 통해 데이터를 전달받고, Model도 Controller를 통해 데이터를 전달하기 때문에, 복잡한 대규모 프로젝트의 경우 Controller가 불필요하게 커지는 현상이 나타날 수 있다. 이러한 현상을 Massive-View-Controller현상이라고 한다.
MVC 패턴을 지키면서 코딩하는 방법
- Model은 Controller와 View에 의존하지 않아야 한다.
(Model 내부에 Controller와 View와 관련된 코드가 있으면 안 된다.)
- View는 Model에만 의존해야 하고, Controller에는 의존하면 안 된다.
(View 내부에 Model의 코드만 있을 수 있고, Controller의 코드가 있으면 안 된다.)
- View가 Model로부터 데이터를 받을 때는, 사용자마다 다르게 보여주어야 하는 데이터에 대해서만 받아야 한다.
- Controller는 Model과 View에 의존해도 된다.
(Controller 내부에는 Model과 View의 코드가 있을 수 있다.)
- View가 Model로부터 데이터를 받을 때, 반드시 Controller에서 받아야 한다.