본문 바로가기

안드로이드/안드로이드 개인공부

[안드로이드 개인공부] BaseView, BaseViewModel 작성해서 MVVM 만들기

참고 블로그 https://deque.tistory.com/108?category=984011

공부하면서 참고한 소스 코드는 https://github.com/5seunghoon/Kotlin-MVVM-Sample 입니다.

먼저 MVVM 이란?

MVP패턴에서 Presenter와 View, 그리고 Model간의 의존성이 너무 깊은것 아닌가?에서 시작되어 진보된 패턴이다.

 

view는 viewModel의 참조를 가지고 있지만, viewModel은 view의 참조를 가지고 있지 않는다.

viewModel도 Model의 참조를 가지고 있지만, Model은 viewModel의 참조를 가지고 있지 않다.

 

그럼 viewModel은 StartActivity나 snackbar 등 view의 함수를 어떻게 호출할 수 있을까?

바로 view가 viewModel을 Binding하고 있으면 된다.

그럼 viewmodel은 단순히 값을 바꾸기만 해되 되며, view가 그 값이 바뀌는 것을 관찰하게 된다.

 

자세한 링크는 : https://kaidroid.me/post/android-mvvm-viewmodel-livedata-databinding/를 통해 공부하면된다.

 

여기서

RxJava, Koin, Retrofit, DataBinding을 사용한다.

 

Gradle설정

먼저 androidx로 Migration을 해준다.

 

일단, 데이터 바인딩을 사용하기 때문에

android {
compileSdkVersion 28
defaultConfig {
.
.
.
}
buildTypes {
release {
.
.
.
}
}
dataBinding {
enabled = true
}
}

이렇게 true값을 넣어줘야한다.

 

BaseViewModel

본격적으로 MVVM패턴을 만들어보자

우리가 해야할 일은 액티비티(뷰)가 참조할 뷰모델을 만들고, 뷰가 뷰모델을 참조하고, 데이터 바인딩을 수행하게 하는 것이다.

먼저 뷰모델이 상속 받을 BaseViewModel을 만들어보자

 

open class BaseKotlinViewModel : ViewModel() {

/**
* RxJava 의 observing을 위한 부분.
* addDisposable을 이용하여 추가하기만 하면 된다
*/
private val compositeDisposable = CompositeDisposable()

fun addDisposable(disposable: Disposable) {
	compositeDisposable.add(disposable)
}

override fun onCleared() {
	compositeDisposable.clear()
	super.onCleared()
	}
}

 이제 이렇게 만들어진 베이스 뷰모델은 다른 뷰모델에서 상속받게 된다.