Android MVVM 패턴

Jong_Han·2022년 1월 30일
0

Android

목록 보기
8/9

MVVM?

Model, View, ViewModel로 구성되는 아키텍처 패턴 입니다.

MVP에서는 View와 Presenter가 서로를 알고 있는 것과는 다르게, MVVM은 ViewModel은 View에 대한 의존성을 전혀 갖지 않습니다.


이미지 출처 : https://velog.io/@jojo_devstory/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%ED%8C%A8%ED%84%B4-MVVM%EC%9D%B4-%EB%AD%98%EA%B9%8C

각 구성요소의 역할은 다음과 같습니다.

  • Model : 로컬 DB, 네트워크 등을 담당합니다.
  • View : 이벤트를 받아 ViewModel로 넘기고 ViewModel을 관찰하면서 View를 갱신합니다.
  • ViewModel : Model로부터 데이터를 받아 View에게 필요한 형태로 가공합니다.

장점

ViewModel에서 View와의 의존성을 완벽하게 분리할 수 있습니다.

단점

설계 난이도가 높습니다.

또한, 프로젝트의 규모가 커질수록 ViewModel이 로직이 집중되는 형태가 됩니다.

구현

안드로이드에서는 MVVM 패턴을 보다 쉽게 구현할 수 있도록 AAC를 제공합니다.

AAC에는 DataBinding, LiveData, ViewModel 등이 포함되어 있습니다.

여기에서 AAC의 ViewModel은 MVVM의 ViewModel과는 다릅니다.

https://medium.com/kenneth-android/android-mvvm-viewmodel과-aac-viewmodel의-차이-8c0d54922e07

자세한 내용은 위 링크에서 참고하시면 좋을 것 같습니다.

AAC ViewModel

ExampleViewModel: ViewModel() { }

AAC의 ViewModel은 액티비티가 생성되고, 파괴될 때까지 유지되어 화면이 회전되어도 데이터를 유지할 수 있도록 해줍니다.

LiveData

ExampleViewModel: ViewModel() { 
	val _example = MutableLiveData<String>()
	val example: LiveData<String> = _example
}

LiveData는 Lifecycle를 알고 있는 관측이 가능한 데이터 홀더 클래스 입니다.

변경이 가능한 MutableLiveData와 변경이 불가능한 LiveData가 있으며, ViewModel에서는 MutableLiveData를 통해 값을 관리하고, View에서는 LiveData를 observe만 가능하고 변경할 수 없도록 합니다.

LiveData는 스스로 Lifecycle을 알고 있기 때문에, onStart에서 observe를 시작하고, onStop에서 observe를 자동으로 취소합니다.

이를 통해 메모리릭을 방지할 수 있습니다.

Sample

https://github.com/Jong-han/Android_architect_study/tree/mvvm
제가 작성한 MVVM 샘플 프로젝트 입니다.
LiveData -> Flow로 모두 변환하였기 때문에, 이 점 참고하시면 좋을 것 같습니다.
flow에 대해서는 추후에 다뤄보도록 하겠습니다.

profile
안드로이드 개.....발자?

0개의 댓글