Android Project에 ViewModel 적용하기

개요

Android Project에 다양한 라이브러리와 패턴들을 적용하고 구현했다면, 이제 ViewModel에 데이터를 전달하여 관리하도록 적용해야한다. 해당 포스트에서는 앞서 프로젝트에 적용한 KoinAAC ViewModel을 활용한 예시를 다루겠다.

적용

1. ViewModel 정의

class MainViewModel(private val userRepository: UserRepository): ViewModel() {
    ...
}

2. DI 적용

AppModule.kt

...
viewModel { MainViewModel(get()) }

3. Activity Injection

MainActivity.kt

class MainActivity : BaseActivity() {
    private val mainViewModel: MainViewModel by viewModel()
}

viewModel()을 통해 ViewModel 인스턴스를 생성할 경우, 당연하지만 별도의 새로운 Lifecycle이 생성된다. 은근히 놓치기 쉬운 부분이다.

4. Fragment Injection

MainFragment.kt

class MainFragment: Fragment() {
    private val mainViewModel: MainViewModel by sharedViewModel()
}

여기서 ViewModel은 Activity의 ViewModel을 공유한다. 마찬가지로 Activity 내의 모든 Fragment은 같은 ViewModel을 공유하므로, 이를 통해 데이터를 공유할 수 있다.


SulfurBottom
Written by@SulfurBottom
Front-End Developer. Like Develop, Travel, Friend.

GitHubLinkedIn