기존 화면 회전할때 onCreate가 다시 호출되어서 기존에 세팅되었던 데이터들이 초기화되는 현상
“ViewModel은 액티비티의 ‘데이터/로직’을 액티비티 생명주기에서 분리해서 관리하려고 만든 것”
Activity는 그걸 관찰해서 화면만 그리게 하자. 이게 ViewModel의 핵심 의도
View가 재구성되어도 ViewModel은 유지가 되어야하니 ViewModel은 View(Compose UI)의 메모리에 속하지 않고, ViewModelStore라는 별도의 저장소(메모리)에 붙는다.
ViewModel 을 제대로 사용할려면 "ViewModel" 답게 사용해야함. 그냥 객체로 사용하면 ViewModel 을 쓰는 이유가 없음
ViewModelStore 이 있고 ViewModelStoreOwner 가 있음. ViewModelStoreOwner 는 Activity / Fragment / NavBackStackEntry 만 가능
ViewModelStoreOwner 은 ViewModelStore 을 가지고 있음. ViewModel 인스턴스를 보관하는 Map 같은 것.
같은 ViewModel 클래스 타입은 같은 key로 인식되어 같은 ViewModel 인스턴스를 반환하고, 다른 ViewModel 클래스 타입은 다른 key로 인식되어 서로 다른 ViewModel 인스턴스를 반환한다.
val a: CounterViewModel by viewModels()
val b: CounterViewModel by viewModels()
-> 같은 key
val a: CounterViewModel by viewModels()
val b: TodoViewModel by viewModels()
-> 다른 key
즉,
ViewModelStore는 “ViewModel 클래스 타입(+ optional key)”를 기준으로
ViewModel 인스턴스를 관리한다.