Android Project에 다양한 라이브러리와 패턴들을 적용하고 구현했다면, 이제 ViewModel에 데이터를 전달하여 관리하도록 적용해야한다. 해당 포스트에서는 앞서 프로젝트에 적용한 Koin과 AAC ViewModel을 활용한 예시를 다루겠다.
class MainViewModel(private val userRepository: UserRepository): ViewModel() {
...
}
AppModule.kt
...
viewModel { MainViewModel(get()) }
MainActivity.kt
class MainActivity : BaseActivity() {
private val mainViewModel: MainViewModel by viewModel()
}
viewModel()
을 통해 ViewModel 인스턴스를 생성할 경우, 당연하지만 별도의 새로운 Lifecycle이 생성된다. 은근히 놓치기 쉬운 부분이다.
MainFragment.kt
class MainFragment: Fragment() {
private val mainViewModel: MainViewModel by sharedViewModel()
}
여기서 ViewModel은 Activity의 ViewModel을 공유한다. 마찬가지로 Activity 내의 모든 Fragment은 같은 ViewModel을 공유하므로, 이를 통해 데이터를 공유할 수 있다.