본문 바로가기
개발공부 일지/면접

MVC vs MVP vs MVVM

by Box Cat 2023. 10. 4.
728x90
반응형

MVC => Model - View - Controller

 

MVP => Model - View - Presenter

 

MVVM => Model - View - ViewModel



[ MVC 패턴] (SW 개발방법론)

 

 

MVC패턴은 개발자가 Controller내의 로직을 다루고 ControllerModel 통해 가져온 데이터를, View 에게 전달합니다.
간단히 말하자면, View 화면, Controller 서버, Model 데이터베이스라고 있습니다.

MVP
MVVM MVC에서 파생된 하나의 개발방법론입니다.

그렇다는 의미는 MVC 먼저 이해하는 것이 기본 베이스입니다.

 

우선 MVC에서의 Controller  Model에게 직접 영향을 끼칠  있습니다.
하지만 Model  Controller, View 직접적인 관련은 전혀 없고

간접적인 ( BroadCast) 방식으로 전달합니다.

*Observer
디자인패턴 보게 되면 Model 어떤 것과도 관련이 없는 독립적인 존재입니다.

Controller
 View에게 영향을 끼치지만  역은 성립이 되지 않습니다.
이에 따라 Controller 원하는 View 선택할 있지만 역은 불가능합니다.

따라서 View Controller 관계는 일대다 관계를 유지하고 View Controller 영향을 끼칠 없습니다.

 

 

[ MVC 요약 설명 ]



사용자의 입력은 Controller 들어갑니다.
View-Controller
관계는 One-to-Many 또는 간혹가다 Many-to-Many방식입니다.
Controller
 따라서 원하는 View 선택 가능합니다.

 

View Model 서로간의 연관성이 없습니다. (* Observer 방식으로 간접적으로 있어요)

MVC
방법론의 경우 규모가 커질수록 Controller 비례해서 커집니다.




[ MVP 요약 설명 ]

 

사용자의 입력은 View를 통해서 입력하게 됩니다.

View-Presenter
관계는 One-to-One입니다.
View
는 Presenter를 참조하고, Presenter 는 View를 참조합니다. ( 서로간의 연결 결합 고리가 강합니다 )
View
Model에게 영향을 끼칠 없습니다. ( * MVC 비슷합니다.)


다른점은 Presenter는Model의 데이터를 수정하고, 데이터를 가져오는 것이 가능하다는 점입니다.

결론적으로 특징은 View와 Model 은 그 사이의 연결고리인 Presenter를 통해서만 왔다갔다 할 수 있습니다.
하지만 View-Presenter 관계는 서로 강한 결합을 가지게 됩니다.
그리고 마지막으로 View-Presenter 일대일 관계로 인해 각각의 View마다 각각의 Presenter가 존재하게 됩니다.

그러므로 MVP 패턴으로 짜게 될 경우 코드의 수는 증가하게 됩니다.

 

 



 

 

 

[ MVVM 요약 설명 ]

 MVVM 패턴은 MVC의 C에 해당하는 컨트롤러가 뷰모델로 바뀐 패턴입니다. 여기서 뷰모델은 뷰를 추상화한 계층이며, MVVM 패턴은 MVC 패턴과는 다르게 커맨드와 데이터 바인딩을 가지는 것이 특징입니다. 뷰와 뷰모델 사이의 양방향 데이터 바인딩을 지원하여 UI를 별도의 코드 수정 없이 재사용할 수 있습니다. 여기서 모델은 데이터를 저장하고 뷰모델은 모델의 데이터를 가져와서 뷰에 표시합니다.

사용자의 입력은 View 통해서 입력하게되고 입력된 View안에 값을 바탕으로 ViewModel 값이 변경됩니다.

 

밑의 MVVM패턴 그림에서 보이듯이 


1. View
는 Model에 영향을 끼치지 않습니다.
2. View
는ViewModel에게 영향을 끼칩니다.
3. ViewModel
은 Model의 데이터를 수정합니다.
4. ViewModel
은 Controller의 역할을 합니다.
5. ViewModel
은 특정View 에게 맞춰진 Model입니다.

 

그로 인해, View ViewModel 만을 고려합니다.

 

따라서 의존성을 데이터 바인딩과 명령을 통해 해결합니다.

 

 

  • 핵심: MVVM은 기존 디자인 패턴의 뷰계층에서 모든 GUI 코드를 제거한다.(데이터 바인딩 효과)

MVVM의 장점

  • 모듈화하기가 좋다.
  • 모듈화가 잘 되면 유닛 테스트가 수월해진다.
  • 뷰와 모델 간의 간섭이 줄어들어 프로젝트 장기화시 소스 코드를 보기가 편하다.
  • 일부만 수정시 코드 변경을 최소화 할 수 있다.
  • 뷰를 직접 조작하는 빈도를 줄여 영역이 독립적으로 동작한다.

MVVM의 단점

  • 큰 프로젝트의 경우 데이터를 바인딩하고 시작하기 떄문에 메모리 사용률 증가(바인딩된 데이터가 많을 경우)
  • 설계가 어렵고 설계를 잘못하면 의미가 없다.
 
 
728x90
반응형

댓글