본문 바로가기
개발관련

디자인패턴 MVC / MVP / MVVM

by MinChan-Youn 2021. 11. 18.

이번에는 디자인패턴에 대해서 알아보겠습니다.

MVC (Model - View - Controller) Model: 데이터 / View: XML파일 / Controller: Activity
MVP (Model - View - Presenter) Model: 데이터 / View: Activity / Presenter: Model과 View를 연결해주는 매개체
MVVM (Model - View - ViewModel) Model: 데이터 / View: Activity / ViewModel: Model과 View를 연결해주는 매개체

 

1. MVC (Model - View - Controller)

View: MVC에서 View는 아무 역할 없는 느낌이다. 뷰를 그냥 표시하는 XML파일이라고 생각하면 된다.

Controller: Model과 View를 연결해주는 역할, 유저에게 액션을 받아 처리하는 역할. 즉 Activity, Fragment라고 생각하면 된다.

 

- 모델과 뷰를 분리해준다는 점. 모델을 쉽게 테스트할 수 있다는 점이다. 하지만 MVC에서 Controller가 깊게 종속되므로 테스트하는데 문제가 있다. 또 코드가 전부 Activity, Fragment쪽으로 몰리게 되어 유지보수에 어려움이 있다.

 

 

 

 

2. MVP (Model - View - Presenter)

View: MVP에서 View는 MVC에서 Controller에 있던 Activity, Fragment가 넘어왔다고 생각하면 된다. 또 View를 관리하는 Interface를  추가하여 Presenter를 독립적으로 만든다.

Presenter: 기본적으로 Controller와 같은 역할. Controller와 다른점이 있다면, View에 연결되는 것이 아니라 단순한 Interface라는 점. 테스트 용이성 모듈화/유연성 문제를 해결할 수 있다. 

 

- MVC에 비해서 코드가 깔끔해 졌다는 것을 느낄 수 있다. View와 Presenter가 1:1대응으로 View Interface를 구현했다면 Presenter로직을 손 쉽게 테스트 할 수 있다. 하지만 MVC와 마찬가지로 프로젝트를 수정하거나 새로운 기능을 추가할때 로직이 Presenter로 모이게 되며 유지보수에 어려움이 있다.

 

 

 

 

3. MVVM (Model - View - ViewModel)

View: MVVM에서 View는 MVC에서 Controller에 있던 Activity, Fragment가 넘어왔다고 생각하면 된다. 또 데이터 바인딩을 위해 XML을 적절히 변경해 주어야 한다. 이를 통해 View는 Model과 유연한 Binding이 가능하다.

ViewModel: ViewModel은 View에 종속되면 안된다. ViewModel을 통해 사용할 Model을 래핑하고 Binding시켜줄 Observe데이터를 생성한다. 

 

-MVVM은 DataBinding의 이해도가 필요. 또 ViewModel은 View에 의존도가 없으므로 MVP처럼 가상View를 만들 필요가 없음. ViewModel과 View의 종속성이 1:N의 관계이므로 코드의 양을 줄일 수 있다.