ViewModel 이란
안드로이드 공식문서에 따르면 ViewModel 클래스란 LifeCycle를 고려하여 UI 관련 데이터를 저장하고 관리하도록 설계되었습니다. 즉 Activity와 Fragment 같이 LifeCycle을 가지고 있는 View의 Model(데이터)를 저장하고 관리한다.
ViewModel 의 필요성
그렇다면 왜 Activity와 Fragment의 Model(데이터)를 ViewModel로 관리할까?
간단한 예시로 필요성을 설명해 보겠습니다.
즉 화면회전과 같은 이벤트가 발생했을때 만들어진 UI컨트롤러를 Destroy()시키고 다시 onCreate() 합니다.
시스템에서 UI컨트롤러를 제거하거나, 다시 만들때 컨트롤러에 저장된 모든 일시적인 UI 관련 데이터가 삭제됩니다.
(그래서 위에 예시를 보면 화면을 회전을 시켰을 때 숫자가 0으로 바뀌었습니다.)
이 같은 현상을 해결하기 위해 Acitivity나 Fragment의 LifeCycle을 신경 쓰지 않고 Model(데이터)를 관리할 수 있는
ViewModel을 사용하는 것입니다.
ViewModel 의 장점
View의 Model(데이터를)을 ViewModel로 관리하면 장점이 있습니다.
1. Activity나 Fragment 같은 UI컨트롤러의 과도한 책임을 분담하여 클래스가 거대해지는 것을 방지합니다.
2. Model만 따로 관리하니 유지보수가 용이합니다.
3. 재사용성 그리고 테스트 등을 용이하게 만들어 준다.
ViewModel LifeCycle
이러한 ViewModel도 LifeCycle 가지고 있습니다.
ViewModel의 LifeCycle은 ViewModelProvider에 전달되는 객체의 LifeCycle로 지정됩니다.
val viewModel = ViewModelProvider(this@MainActivity).get(TestViewModel::class.java)
ViewModelProvider에 MainActivity의 객체가 전달되었다.
이렇게 되면 ViewModel은 MainActivity가 onDestroy 이후 Finished 종료됐을 때까지의 LifeCycle을 가진다.
위에 사진에서 Activity rotated 부분을 보면 Activity가 회전되었을 때를 보여준다.
Activity가 회전되어서 UI컨트롤러가 삭제되고 다시 만들어져도 ViewModel은 변경되지 않습니다.
ViewModel 사용예시
ViewModel을 사용해서 화면 회전을 해도 데이터를 유지시킬 수 있다!
https://black-jin0427.tistory.com/389 < ViewModel초기화..!
'Android-Kotlin > JetPack' 카테고리의 다른 글
[Android] LiveData 란? (0) | 2022.06.25 |
---|---|
[Android] ViewModel을 Fragment에서 간단 사용 - Kotlin (0) | 2022.06.24 |
[Android] DataBinding을 Fragment에서 사용하기 - Kotlin (0) | 2022.06.21 |
[Android] DataBinding 개념 및 간단 사용법 - Kotlin (0) | 2022.06.21 |