Android Design Pattern (MVC, MVP, MVVM)
Android에서는 일반 애플리케이션 디자인 패턴(코드 디자인)이 통용될 수 있습니다.
따라서, 디자인 패턴으로 MVC, MVP, MVVM 등 다양한 형식으로 작성할 수 있는데요
무엇이 좋다/나쁘다 보다는 개발자의 선택으로, 개발하려는 애플리케이션이나 개발자 성향에 따라서 효율적인 모델을 적용하시면 되겠습니다.
- 유지보수, 관리를 용이하게 하기 위해!
이 포스팅에서는 여러가지 디자인 패턴들 중 MVC, MVP, MVVM 패턴들에 대해 알아보겠습니다.
1. MVC 패턴
가장 초창기 패턴으로 Model, View, Controller 의 개념입니다.
Model : 입력에 대한 처리를 수행하는 역할
View : 처리 결과를 화면에 표시하는 역할
Controller : 사용자의 입력을 받는 역할
Controller (입력) -> Model (입력에 대한 처리) -> View (처리 결과를 화면에 표시)
보면 명확하게 역할이 나누어져있는 것 같지만 사실 MVC 패턴에는 단점이 하나 있습니다.
Controller와 Model은 명확하게 분리되지만 View와 Model에는 의존성이 생기게 됩니다.
View가 처리 결과를 화면에 표시하고자 할 때, Model을 이용하기 때문에 서로 의존하는 관계가 됩니다.
- MVC 모델을 사용할 때에는 View와 Model의 의존성을 얼마나 최소화 하는가에 따라 효율성이 결정됩니다.
2. MVVM 패턴
Model - View - ViewModel 패턴입니다.
Model : 입력에 대한 처리를 수행하는 역할
ViewModel : 처리 결과를 화면에 표시하기 위해 데이터를 View에 맞게 변환, View로 부터 받은 입력데이터를 Model로 전달하는 역할
View : ViewModel로부터 전달받은 결과를 화면에 표시하고 사용자로부터 입력을 받는 역할
MVC에서 문제가 되었던 View와 Model의 의존성을 줄이고자 생겨난 패턴입니다.
바로 ViewModel은 View + Controller의 역할을 하게 됩니다.
- View와의 의존성을 완벽하게 분리할 수 있다는 장점이 있지만, View에 대한 처리 내용이 복잡해 질 수록 ViewModel이 거대해지게 됩니다.
3. MVP 패턴
Model - View - Presenter 패턴입니다.
Model : 역시 입력에 대한 처리를 수행하는 역할
View : 처리 결과에 대한 표시와 함께 사용자의 입력도 받는 역할
Presenter : View와 Model 사이에서의 기능 제어 역할로 View와 1:1로 매칭
Presenter가 View와 1:1로 매칭되어 View의 입력/출력을 Presenter를 통해 처리하기 때문에 Model과 View가 명확하게 분리된다는 장점이 있습니다.
단점으로는 View와 Presenter의 의존성이 생기게 되겠죠?
정리해보면......
출처 : https://tomyrhymond.wordpress.com/2011/09/16/mvc-mvp-and-mvvm/
이런 형태가 되겠습니다.
어떤 형태의 디자인이 좋다고 이야기하기는 어렵기 때문에 개발하고자 하는 어플리케이션의 구조를 떠올려보시면서 선택하시길 바랍니다.