서두
해당 포스트는 Android Jetpack 중 하나인 View Model 에 대해서 정리한 것입니다.
ViewModel
ViewModel 는 Android MVVM 디자인 패턴을 구현하기 위해서 사용되는 컴포넌트입니다.
만약 Android MVVM 디자인 패턴을 구현 할 때에는 보통 View Model과 아래의 컴포넌트와 같이 set로 묶어서 사용합니다.
주된 목적은
첫 번째로 액티비티나 프래그먼트에서 사용되는 데이터들을 저장/관리를 합니다.
두 번째로 데이터를 가져오기 위해 네트워크 오퍼레이션이나 DB 쿼리등 비동기 로직을 액티비티나 프래그먼트로 부터 분리할수 있다는 것에 있습니다.
여기서 데이터는 LiveData
형태로 저장이 되며 액티비티/프래그먼트와 View Model간 서로 이어주는 것이 Data biding
입니다. LiveData
나 Data biding
은 바로 위 링크를 참고 바랍니다.
View Model 구현
새로운 View Model를 구현 할 때에는 ViewModel 클래스를 상속받아서 사용합니다.
class MyViewModel : ViewModel() {
private val imageDataList: MutableLiveData<List<ImageData>> =
MutableLiveData<List<ImageData>>().apply {
viewModelScope.launch(Main) {
value = mutableListOf()
}
}
private val counter: MutableLiveData<Int> = MutableLiveData<Int>().apply {
viewModelScope.launch(Main) {
value = 0
}
}
}
만약 ViewModel에 Context가 필요하면 AndroidViewModel를 상속합니다.
class MyViewModel(application: Application) : AndroidViewModel(application) {
val context : Context = application
}
또는 ktx 를 사용하면 아래와 같이 간략하게 생성할 수 있습니다.
dependencies {
implementation 'androidx.activity:activity-ktx:1.1.0'
}
val viewModel: MyViewModel by viewModels()
View Model 생명주기
액티비티 또는 프래그먼트에서 ViewModelProvider 를 통해 ViewModel를 생성을 하며 View Model은 액티비티가 최종 종료될 때 또는 프래그먼트가 액티비티로부터 분리될 때 소멸이 됩니다.
예를 들어 액티비티가 화면 회전하는 경우에는 onDestroy() 가 되어도 바로 onCreate() 가 됩니다. 이 경우 View Model를 사용하지 않는다면 onSaveInstance() 를 통해 데이터를 저장하고 복구하는 로직이 필요하게 됩니다.
하지만 View Model를 사용하게 된다면 액티비티가 onDestroy() 가 되어도 View Model은 계속 유지가 되기 때문에 데이터 저장/복구 로직을 구현하지 않아도 됩니다.
댓글남기기