drcarter의 DevLog

[Android] MVC, MVVM, MVP

Android2015. 10. 26. 16:41


안드로이드 개발하는 개발 패턴으로는 MVC( Model - View, Controller)와, MVVM(Model - View, ViewModel), 그리고 MVP(Model - View - Presenter)방법이 있습니다. 이 세가지 방법에는 각자만의 스타일과 장단점을 가지고 있구요. 안드로이드 개발자들이 많이 늘어나고 좀더 편한 개발 방법들을 추가하면서 나오는 방법들이지 않을 까 합니다.

1. MVC ( Model - View - Controller )

 - Model : 안드로이드에서 사용될 데이터들.

 -  View : activity_main.xml 과 같은 view layout

 - Controller : Activity, Fragment 들...

알게 모르게 가장 많이 사용된 패턴이지 않을 까 생각됩니다. 그런데 View와 Controller의 coupling이 너무 강합니다. 누구 하나 땔래야 땔 수 없는 구조이죠. 우리가 알고 있는 좋은 구조는 loose coupling이 많아야 좋은 구조라고 배웠을 겁니다. 그래서 장기적으로 봤을 대 어떤 구조로 가야 좋을 지 생각해 볼 필요가 있습니다.


2. MVVM ( Model - View - ViewModel )

ViewModel은 Controller와 View의 구조를 통합적으로 가지고 있다고 보시면 될 거 같습니다. ViewModel을 독립적으로 가져갈 수 있지만, 나중에 View가 변경된다면 ViewModel을 한번에 다 변경해야 할 필요도 있어 보입니다. 가끔 Git에서 안드로이드 ui 라이브러리나 componet를 보면 mvvm으로 구현된 것들이 많았던 것으로 기억됩니다. 이 방법이 그나마 View에 대한 가장 독립적인 방법이지 않았을 까 생각됩니다. 


3. MVP ( Model - View - Presenter )

전체적인 패턴이 MVC와 비슷합니다. Controller가 Presenter로 보시면 될 듯 하지만 틀린 점이라면 View에 대한 관리와 접근은 Activity에서 하고, Model에 대한 컨트롤러 역활은 Presenter에서 하게 됩니다. 


이 세 방법에 대한 생각은 제 주관적인 생각입니다. MVC, MVVM, MVP 뭐 하나 나쁘다 좋다 할 방법은 없다고 생각 됩니다.  각자만의 장단점이 있고 누가 어떻게 사용하느냐 그리고 어떤 프로젝트 인지에 따라서도 많이 틀려질 것으로 보입니다. 저는 최근에 프로젝트를 MVP방법으로 진행했습니다. MVP를 사용하면서 경험을 해봤을 대 각각 구조에 대해서 loose coupling적인 방법으로 구현을 할 수 있었지만, 너무 독립적으로 진행하다보니 해당 interface에 대한 구현이 많아지는 것을 느낄 수 있었습니다. 다른 프로젝트를 진행한다면 다시 MVP방법을 사용해 볼려고는 합니다. 단지 저는 MVC, MVVM방법보다는 그래도 가장 느슨한 결합도를 가졌다고 보여집니다.

공부하면서 만든 샘플은 git에 올려 둡니다. 그냥 참고 자료에요.

https://github.com/drcarter/AndroidDevPattern