JEP's Diary

Android ViewModel 본문

Development/Android

Android ViewModel

지으니88 2018. 8. 8. 17:00

Android ViewModel


Android Architecture Component의 ViewModel은 액티비티와 프래그먼트에서 사용되는 UI관련 데이터를 보관하고, 관리하기 위해 디자인 되었다.

액티비티가 재생성 될때도 ViewModel의 인스턴스가 유지되어 데이터가 보관이되고,

데이터의 소유권을 ViewModel이 가지고 있기 때문에 코드분리가되어 액티비티와 프래그먼트는 UI를 업데이트 하는 역할을 하게된다. 


액티비티의 생성, 화면전환, 종료에 이르는 수명주기에도 ViewModel 스코프는 일관되게 유지가된다.

따라서 프래그먼트들 사이에서 ViewModel을 이용해 데이터를 쉽게 공유할 수 있어, 프로그먼트 간 데이터 공유에 액티비티가 관여하지 않아도 된다. 

액티비티가 완전히 종료되는 시점에 ViewModel 의 onCleared()함수가 호출되어 종료된다.


ViewModel 사용시 주의점

ViewModel에 액티비티, 프래그먼트, 뷰에 대한 컨텍스트를 저장해서는 안된다.

액티비티가 재생성될 때, ViewModel은 액티비티 수명 주기 외부에 존재하기 때문에 UI컨텍스트를 ViewModel에 저장하면 메모리릭을 발생시키는 원인이 될 수 있다.

단 Application Context를 저장하는 것은 문제가 되지 않는다. Application Context는 전체 앱의 수명주기를 의미하기 때문에 메모리릭에 영향을 주지 않으며 이런 용도를 위해 AndroidViewModel클래스를 제공한다.


출처. https://medium.com/@jungil.han