[Android] ViewModel을 왜 상속하고 어떻게 생명주기를 알고 있을까?

윤찬·2025년 8월 21일

Android

목록 보기
18/38

ViewModel이란?

ViewModel은 안드로이드 MVVM 아키텍처에서 중요한 구성 요소로 화면관련 데이터를 관리하고 생명주기에 안전하게 유지하느 역할을 한다.

ViewModel을 사용하면 화면 회전 시에도 데이터가 초기화하는 문제를 해결할 수 있고, UI와 로직 분리, 불필요한 참조를 제거해 메모리 누스 방지 및 테스트가 용이하다는 장점이 있다.

class에서 ViewModel을 상속하는 이유?

ViewModel을 상속하는 이유는 안드로이드 생명주기와 안전하게 연동되기 때문이다.
ViewModel은 화면 회전과 같은 구성 변경에도 데이터를 유지할 수 있고, viewModelScope를 제공해 코루틴을 안전하게 실행할 수 있다.
또한 onCleared()를 통해 화면이 완전히 종료될 때 자원 정리를 자동으로 할 수 있어 메모리 누수를 방지할 수 있습니다. 결과적으로 UI와 비즈니스 로직을 분리해 구조적인 코드 작성이 가능해집니다.

ViewModel이 어떻게 관리되는가?

ViewModel은 단순히 생성하는 것이 아니라 ViewModelProvider를 통해 ViewModelStore 안에 저장되게 된다.
이 Store는 Activity나 Fragment에 하나씩 존재하며, 구성 변경으로 인해 액티비티가 재생성되더라도 같은 ViewModelStore가 유지된다. 즉 Acivity나 Fragment가 죽었다 살아나도 ViewModel은 살아남는다.

ViewModelProvider는 ViewModelStore에 같은 타입의 ViewModel이 있는지 확인후 있으면 기존 인스턴스를 없으면 새로 생성 후 저장한다.

ViewModel이 생명주기에 어떻게 맞출까?

viewModel 자체는 LifeCycleOwner에 직접 붙어 lifecycle 이벤트를 듣는 구조가 아니다.
대신 ViewModelStore라는 저장소를 통해 간접적으로 연결이 된다.

Activity나 Fragment는 각각 ViewModelStoreOwner를 구현한다. 이 내부에서 ReportFragment나 LifecycleRegistry를 이용해 Lifecycle 이벤트(onDestroy)를 감지한다. 이 때를 감지해 ViewModelSotre.clear()가 실행된다.

ViewModelStore.clear()는 그 안에 있던 모든 ViewModel의 clear()를 호출하고 각 ViewModel의 onCleared()가 실행되면서 리소스 해제와 정리가 이루어진다.

즉 ViewModel은 Lifecycle을 직접 관찰하지 않고, Activity나 Fragment가 구혀한 ViewModelStoreOwner를 통해 관리가 된다. 이것으로 onDestroy()가 감지 될때 ViewModelStore.clear()가 일어난다.

profile
좋은 개발자가 되기까지

0개의 댓글