ViewModel 생성법 2가지
글을 작성하면서 틀릴 가능성이 매우 높다. 추후 수정 가능성 높음.
한가지 방법은 ktx를 이용한 방법이고, 한가지 방법은 koin 라이브러리를 이용한 방법이다.
ktx를 이용한 방법이 보다 쉽게 생성할 수 있고, koin은 복잡하다. 단 koin의 경우 ViewModel 외에 Repository, Model 등도 관리하기 좋다. koin의 경우 DI 패턴을 이용한다.
1. KTX를 이용한 ViewModel 생성
- 종속성 추가
def archLifecycleVersion = '2.2.0'
implementation "androidx.lifecycle:lifecycle-extensions:$archLifecycleVersion"
kapt "androidx.lifecycle:lifecycle-compiler:$archLifecycleVersion"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$archLifecycleVersion"
그리고, apply plugin: 'kotlin-kapt'
- ViewModel 클래스 생성. 상속은 AndroidViewModel을 받는다.
예 : ) class testViewModel(application : Application) : AndroidViewModel(application) { ...... }
- Activity 혹은 Fragment 에서 ViewModel 맴버변수로 생성
val viewModel : testViewModel by viewModels()
2. Koin 을 이용한 ViewModel 생성 (사실상 Koin 사용법)
- 종속성 추가. 위에 추가한 종속성 외에 추가로 추가
implementation 'io.insert-koin:koin-androidx-ext:2.2.3'
implementation 'io.insert-koin:koin-androidx-fragment:2.2.3'
implementation 'io.insert-koin:koin-androidx-viewmodel:2.2.3'
implementation 'io.insert-koin:koin-androidx-scope:2.2.3'
- 각종 모듈 class 생성 (여기서는 ViewModelModule). 이외 repository나 model module 도 생성할 수 있다.
single 이나 factory를 통해 생성 할 수 있다.
object ViewModelModule {
val getModule = module {
viewModel {
//뷰모델 생성자에 필요한 인자값 만큼 get()을 넣어준다.
//여기서는 context 로 예를 든다. 즉 testViewModel 클래스 생성자 인자로
//Context를 받는다
testViewModel(get())
}
}
}
- Android Main Activity - Application 에 코드 추가
override fun onCreate() {
super.onCreate()
// koin 초기화.
startKoin {
androidLogger(if (BuildConfig.DEBUG) Level.ERROR else Level.NONE)
androidContext(this@MathpidApplication)
// 모듈 설정.
modules(
ViewModelModule.getModule
)
}
/*
- Activity 에서 ViewModel 생성 (맴버변수로)
val viewModel by viewModel<testViewModel>()