Clean Software/Design Pattern

Android 아키텍처(Architecture) 비교하기 - MVP, MVC, MVVM

728x90
반응형

 

어떤 아키텍쳐를 선택 기준

  • 깔끔한 코드분리가 가능한가
  • Testing가능한 구조를 만들 수 있는가
  • View와 Model간의 관계를 분리할 수 있는가
  • 많은 코드를 손대지 않고, 유지보수 가능한가

 

Activity / Fragment/Adapter

- view/control 역할을 함께한다. (예: OnClickListerner)

- Adapter의 경우Control/Model도 가질 수 있다. 

 

 

안드로이드에서 활용 가능한 Architecture

MVC : Model View Control

  • Model + View + Controller
  • Controller : 사용자의 입력(Action)을 받고 처리하는 부분입다.
  • Controller는 View를 선택할 뿐 직접 업데이트 하지 않습니다. (View는 Controller를 알지 못합니다.)
  • View는 Model을 이용하여 화면을 나타냅니다
  • View와 Model 사이의 의존성이 높다는 것입니다. View와 Model의 높은 의존성은 어플리케이션이 커질 수록 복잡하지고 유지보수가 어렵

 

MVP : Model View Presenter

  • Model + View + Presenter
  • Presenter : View에서 요청한 정보로 Model을 가공하여 View에 전달해 주는 부분입니다. View와 Model을 붙여주는 접착제 역할
  • MVC 패턴의 단점이었던 View와 Model의 의존성을 해결 (Presenter를 통해서만 데이터를 전달 받기 때문)
  • 그러나, View와 Presenter 사이의 의존성이 높음

 

MVVM : Model View ViewModel

  • Model + View + ViewModel
  • View Model : View를 표현하기 위해 만든 View를 위한 Model. View와 Model 사이에서 데이터를 관리해주고 바인딩 해주는 역할
  • Command 패턴과 DataBinding을 사용하여 View와 Model 사이의 의존성이 없음

 

 

 

MVVM ViewModel과 AAC ViewModel의 차이

  • MVVM의 ViewModel의 역할
    • View와 Model 사이에서 데이터를 관리해주고 바인딩 해주는 역할
  • AAC의 ViewModel의 역할
    • 화면 회전 같은 환경에서 데이터를 보관하고 라이프사이클을 알고있어서 Activity나 Fragment의 Destroy시 onClear 함수를 통한 데이터 해제의 역할을 하고있습니다. (데이터를 관리하고 바인딩하라는 목적아님)
  • AAC ViewModel을 아키텍처 MVVM ViewModel 처럼 사용 가능. 거기에 화면회전에 대한 데이터 유지까지 있으니 더 좋겠죠. 하지만 AAC ViewModel은 Activity 내에서 1개만 생성가능합니다.
    • AAC ViewModel은 Activity안에서의 싱글톤 개념인데 MVVM 패턴에서 뷰와 뷰모델은 1:n 관계를 가지기 때문에 Activity 내의 여러 Fragment를 가질시에 여러 Fragment에 ViewModel을 사용하긴 어렵겠죠?

 

결론

  • 팀 내에서 잘 맞는 Architecture 선택해야한다.
  • MVC는 View에서 모델을 사용하기 때문에 공통 코드를 잘 분리해야한다.
  • MVP/MVVM은 기본적으로 View/Model간의 결합도를 낮츨 수 있다.
  • 컴포넌트 분리를 함으로써 테스트 가능한 코드를 작성해야한다.
  • 앱 구성요소는개별적이고 비순차적으로 실행될 수 있으며, 운영체제나 사용자가 언제든지 앱 구성요소를 제거할 수 있습니다.
  • 따라서 앱 구성요소에 앱 데이터상태를 저장해서는 안 되며 앱 구성요소가 서로 종속되면 안 됩니다.
  • 아키텍처 원칙은
    • 1) 관심사 분리 : UI 기반의 클래스는 UI 및 운영체제 상호작용을 처리하는 로직만 포함해야 함
    • 2) Model에서 UI 도출하기 : Model은 앱의 View 객체 및 앱 구성요소와 독립되어 있으므로 앱의 수명 주기 및 관련 문제의 영향을 받지 않음, 데이터상태를 저장

 

 

 

 

 

 

참고

 

www.inflearn.com/course/next-android-kotlin/lecture/13630?tab=note&speed=2

728x90
반응형