ViewModel
- Android Jetpack의 구성요소 중 하나
- 소프트웨어 개발 디자인 패턴중 하나인 MVVM(Model — View — ViewModel) 디자인 패턴으로부터 파생된 단어
- View로부터 독립적이며, View가 필요로 하는 데이터만 소유함
- View에서 보여주는 데이터를 캡슐화하여 Lifecycle이 변화해도 데이터를 - Activity에서는 Activity가 완전히 종료될 때까지, 그리고 Fragment에서는 Fragment가 분리될 때까지 메모리에 남아있도록 설계 되어있음
장점
- View의 데이터 상태 저장에 용이
- Activity나 Fragment 같은 UI컨트롤러의 과도한 책임을 분담하여 클래스가 거대해지는 것을 방지
- 유지보수, 재사용성 그리고 테스트가 용이함
- ViewModel을 사용함으로써 View는 ViewModel에게 받은 데이터로 화면을 갱신하는 역할만을 하며 ViewModel은 View가 화면을 갱신하기 위한 데이터를 가공함
ViewModel Lifecycle
- ViewModel의 LifeCycle은 ViewModelProvider에 전달되는 객체의 LifeCycle로 지정됨
- Activity의 생명 주기 보다 긴 수명을 가지는 생명 주기를 가지고 있기 때문에 ViewModel을 사용하면 화면 전환시 데이터의 소멸을 방지할 수 있음
- 생명 주기에 영향을 받지 않고 데이터를 유지할 수 있음
- UI 컨트롤러와 데이터가 분리됨
- Fragment 간의 데이터 공유가 쉬워짐
ViewModel은 범위로 지정된 ViewModelStoreOwner가 사라질 때까지 메모리에 남아 있음
ViewModelStoreOwner가 사라지는 경우
- Activity가 종료될 때
- Fragment가 분리될 때
- navigation back stack에서 삭제될 때
ViewModel 사용법
이건 나보다 훨씬 정리를 잘 해놓은 블로그가 많이 때문에 이걸 참고하는 게 좋을 것 같다! (절대로 정리 하기 싫은 거 아님😂)
그리고 내가 이전에 공부하면서 ViewModel를 사용한 예제도 참고하면 좋다~! (추후에 올릴 LiveData, Paging에 관한 코드도 포함되어 있다)
참조