[Android]Android Architecture Pattern 에 대하여 - (2) MVVM

2019. 10. 8. 19:04Android

반응형

#오늘의 개념:

MVVM

 

 

MVVM 패턴이란?

Model(M) - View(V) - ViewModel(VM)

그림 1. MVVM의 구조

View : UI. 사용자에게 보이는 화면 및 사용자의 입력 등

ViewModel : View에서 받은 사용자의 액션에 대한 business logic 처리. (액션에 필요한 데이터를 Model을 통해 업데이트하거나)

Model : 데이터 처리

 

 

특징

1. View - ViewModel의 관계

  • 위의 그림 1을 보면, ViewModel은 View의 존재를 모름. 이로써 플랫폼 의존성에서 벗어날 있게 해 준다
  • ViewModel은 계속해서 데이터를 방출하면, View는 ViewModel의 데이터를 계속 듣는 관계.
    • 예) 교수님(ViewModel)은 강의 중 많은 학생(View)들을 대상으로 다양한 정보(live data)를 전달한다. 학생(View)들은 교수(ViewModel)님에 대해 알지만, 교수님(ViewModel)은 각각 학생(View)들을 모른다(물론 다양한 경우가 있지만.. 여기서는 모른다고 가정하자 :0 ). 또한 핸드폰을 하거나 다른 과제를 하는 등 모든 학생(View)들이 교수님(ViewModel)의 강의를 다 잘 듣는 것은 아니다(다 나네..ㅎㅎ). 이게 포인트! 

 

  • 각 View/ViewModel/Model의 관계는 단방향.
  • ViewModel : View = 1 : N 관계 성립. 즉, 여러 개의 View가 동일한 ViewModel을 참조할 수 있음 (MVP와는 상반되는 특징)
  • ViewModel은 LiveData(이 특징은 아래에서 설명)를 이용해 데이터를 계속 방출할 수 있음.

 

2. Data Binding

Data Binding 덕분에 View가 수동적인 포지션을 취할 수 있다

 

 

 

 

MVVM의 장점

  • UI - Business logic 분리 ==> View가 굉장히 가벼움. 오직 visualization
  • View가 Model로부터 분리되어 있기 때문에, View가 비활성화되어도 Model은 유지됨.
  • View에 대한 의존성이 전혀 없기 때문에 테스트가 쉬워짐.  MVP 패턴에서처럼 테스트를 위한 가상 뷰를 만들 필요 없음
  • 모듈화가 쉬워짐
  • Data Binding 덕분에 View와 Model을 연결하기 위해 사용해야 하는 코드를 줄일 수 있음. 
  • MVP에서 View:Presenter 가 1:1 관계인 것과 달리, MVVM에서는 ViewModel:View = 1:N. 즉, 각각의 View마다 Presenter를 일일이 설정해 줄 필요가 없다

 

 

 

MVVM의 단점

  • View가 변수와 표현식 모두에 바인딩될 수 있으므로 시간이 지남에 따라 관계없는 프레젠테이션 로직이 늘어나 XML에 코드를 추가하게 될 수 있다. 이를 방지하려면 View 바인딩 표현식에서 값을 계산하거나 파생하지 말고 항상 ViewModel에서 직접 값을 가져오는 것이 좋다

 

 

 

Live Data 특징

  • 메모리 누수가 없음
  • 액티비티 멈춤으로 인한 크래쉬가 발생하지 않음
  • Lifecycle을 수동으로 관리해주지 않아도 됨
  • 항상 최신의 데이터 유지
  • 디바이스의 화면 회전 등의 변화가 일어나도 즉시 최신의 데이터를 받아옴
반응형