본문 바로가기
CS/디자인패턴

[CS] MVC 패턴, MVP 패턴, MVVM 패턴

by Johnny's 2023. 9. 19.
반응형
SMALL

MVC 패턴

MVC패턴은 모델(Model), 뷰(View), 컨트롤러(Controller)로 이루어진 디자인 패턴

 

 

모델 (Model)

모델(model)은 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻 함
뷰에서 데이터를 생성하거나 수정할 때 컨트롤러를 통해 모델이 생성 또는 업데이트 됨. 예를 들어 사용자가 네모박스에 글자를 적는다고 한다면, 이 때 모델은 네모박스의 크기정보, 글자내용, 글자의 위치, 글자의 포맷 정보 등이 됨

뷰 (View)

뷰(view)는 inputbox, checkbox, textarea 등 사용자 인터페이스 요소를 나타내며 모델을 기반으로 사용자가 볼 수 있는 화면을 뜻함. 모델이 가지고 있는 정보를 따로 저장하지 않아야 하며 변경이 일어나면 컨트롤러에 이를 전달해야 함

컨트롤러

컨트롤러(controller)는 하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할을 하며 이벤트 등 메인 로직을 담당. 또한, 모델과 뷰의 생명주기도 관리하며, 모델이나 뷰의 변경 통지를 받으면 이를 해석하여 각각의 구성 요소에 해당 내용에 대해 알려줌

 

MVC 패턴의 장점

1. 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있음
2. 재사용성과 확장성이 용이함

 

MVC 패턴의 단점

1. 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해짐
2. MVC패턴을 반영한 대표적인 프레임워크로 Spring WEB MVC가 있음

 

Spring의 MVC 패턴 적용사례

 이 중에서 MVC 패턴이 적용된 Web모듈의 Spring Web MVC 확인

디스패처의 서블릿의 요청 처리 과정

Spring Web MVC의 MVC패턴은 디스패처 서블릿의 사용자 요청 처리 과정을 통해 알 수 있음

1. 클라이언트가 요청을 했을 때 가장 먼저 디스패처 서블릿이 이를 받음(프론트 컨트롤러 역할). 이 때 url 이나 form data 등 여러개의 데이터를 어떤 컨트롤러에게 이를 처리하게 결정하는 역할(ex: 공장의 반장) 보통 클래스이름, url, xml의 설정 등을 참고 할 수 있지만 보통 @requestmapping를 참고해서 함

@RequestMapping(value = "/ex/foos", method = POST)
@ResponseBody
public String postFoos() {
	return "Post some Foos";
}


2. 하나 이상의 handler mapping을 참고해서 적절한 컨트롤러를 설정. 이후 컨트롤러로 요청을 보냄
3. 컨트롤러는 데이터베이스에 접근하여 데이터를 가져오는 등 비즈니스 로직을 수행
4. 그렇게 해서 사용자에게 전달해야할 정보인 모델을 생성
5. 그 다음 뷰를 구현하기 위한 view resolver를 참고
6. 해당 정보를 기반으로 뷰를 렌더링
7. 응답 데이터를 보냄
 

 

MVP 패턴

C가 P(프레젠터, presenter) 로 교체된 패턴V와 P는 1:1 관계이므로 MVC보다 더 강한 결합을 지닌 디자인 패턴

 

MVVM 패턴

MVC의 C가 VM(뷰모델, view model)로 바뀐 패턴. VM은 뷰를 추상화한 계층이며 VM : V = 1 : N 이라는 관계를 갖음

 

VM은 커맨드와 데이터 바인딩을 가짐
- 커맨드:여러요소에대한처리를하나의액션으로처리할수있는기법
- 데이터바인딩 : 화면에 보이는 데이터와 브라우저 상의 메모리 데이터를 일치시키는 방법
MVVM 패턴을 가진 대표적인 프레임워크로는 뷰(Vue.js)가 있음

 

차이점

특징 MVC 패턴 MVP 패턴 MVVM 패턴
관계 컨트롤러와 뷰는 1 : N 프레젠터와 뷰는 1 : 1 뷰모델과 뷰는 1 : N
참조 뷰는 컨트롤러를 참조 X 뷰는 프레젠터를 참조 O 뷰는 뷰모델을 참조 O

 

* 참고

- CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조 -인프런

 

반응형
LIST

'CS > 디자인패턴' 카테고리의 다른 글

[CS] 전략 패턴과 의존성 주입의 차이, 컨텍스트 정의  (0) 2023.09.25
[CS] flux 패턴  (0) 2023.09.24
[CS] 프록시 패턴  (0) 2023.09.18
[CS] 옵저버 패턴  (0) 2023.09.06
[CS] 전략 패턴  (0) 2023.09.05

댓글