[Android]Android Architecture Pattern 에 대하여 - (2) MVVM
2019. 10. 8. 19:04ㆍAndroid
반응형
#오늘의 개념:
MVVM
MVVM 패턴이란?
Model(M) - View(V) - ViewModel(VM)
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을 수동으로 관리해주지 않아도 됨
- 항상 최신의 데이터 유지
- 디바이스의 화면 회전 등의 변화가 일어나도 즉시 최신의 데이터를 받아옴
반응형
'Android' 카테고리의 다른 글
Fragment에 대하여 - (1/2) (0) | 2020.03.01 |
---|---|
[Android] DI(의존성 주입)과 Koin에 대하여 (0) | 2019.11.15 |
[Android] Android Architecture Pattern 에 대하여 - (1) (0) | 2019.09.28 |
[Android] 앱 성능 및 속도 개선 방법 (0) | 2019.09.21 |
[Android] Paging Library 에 대하여 (0) | 2019.09.14 |