[Android / Kotlin] ViewModelFactory를 사용하는 이유

Subeen·2024년 2월 29일
0

Android

목록 보기
67/71

ViewModel이 매개변수를 필요로할 때 ViewModelFactory를 사용한다 정도로만 이해하고 ViewModel을 사용했었다. 오늘 나희님이랑 얘기를 하다 ViewModelFactory를 사용하는 이유가 뭘까?
Factory를 사용하지 않으면 어떻게 될까? 직접 매개변수를 넣어서 사용하면 안 될까? 등등 꼬리에 꼬리를 무는 생각으로 ViewModelFactory를 사용하는 이유를 찾아보다 이 생각한 과정을 정리하면 좋을 것 같아 정리해본다 !
더 생각하면 끝도 없을 것 같아 오늘은 이정도로만..😮‍💨

ViewModel을 생성할 때 ViewModelFactory를 사용하는 이유

☝🏻 매개변수가 있는 ViewModel 생성

ViewModel이 매개변수를 필요로 한다면 ViewModelFactory를 사용하여 해당 매개변수를 전달 할 수 있다.
➡️ ViewModel이 안전하게 생성되고 필요한 초기화를 수행할 수 있도록 도와준다.

✌🏻 다양한 ViewModel 인스턴스 생성

특정 조건에 따라 다양한 ViewModel 인스턴스를 생성해야 할 때 ViewModelFactory를 사용할 수 있다.
➡️ ViewModel 타입이지만 다른 초기 상태나 구성을 가진 여러 인스턴스를 생성할 수 있다.

ViewModelFactory를 사용하지 않고 ViewModel을 생성할 때 발생하는 이슈

➡️ ViewModel이 매개변수를 필요로 하는 경우 ViewModelFactory를 사용하지 않으면 기본 생성자만을 사용할 수 있다. 이로 인해 필요한 초기화 데이터를 전달하기가 어려워진다.

ViewModelFactory를 사용하지 않으면 기본 생성자만 사용할 수 있는 이유

ViewModel은 액티비티나 프래그먼트와 생명주기를 공유하면서 데이터를 유지하고 관리하는 역할을 한다.
이러한 특성 때문에 일반적으로 빈 생성자(파라미터가 없는 생성자)를 가지고 있어야 한다.

Android 시스템은 화면 회전, 액티비티의 일시 중지와 재개 등의 상황에서 액티비티나 프래그먼트를 다시 생성할 수 있어야 한다.
이때 빈 생성자를 사용하는 것은 Android 시스템이 ViewModel을 다시 만들 때 쉽게 가능하게 해준다.

그러나 ❕
ViewModel이 특정한 초기화 데이터나 의존성을 필요로 하는 경우가 있는데 이때 빈 생성자만을 사용하면 필요한 데이터를 제공할 수 없어서 ViewModelFactory가 필요해진다.
✨ ViewModelFactory는 ViewModel의 생성을 담당하면서 필요한 초기화 데이터를 전달 할 수 있다.

ViewModelFactory를 사용하지 않고 ViewModel에 직접 매개변수를 넣어서 사용하는건 안 될까?

ViewModel에 직접 매개변수를 전달하여 생성할 수는 있지만 안드로이드에서는 ViewModel의 생성과 관리를 담당하는 시스템이 ViewModelFactory를 통해 이루어지도록 권장하고 있다.

안드로이드에서는 액티비티와 프래그먼트의 생성주기에 맞춰 ViewModel의 인스턴스를 관리하는데 이때 ViewModelFactory를 사용하여 ViewModel을 생성한다.
➡️ 시스템은 액티비티나 프래그먼트가 다시 생성 되어도 ViewModel의 새로운 인스턴스를 생성하지 않고 이전에 생성한 인스턴스를 유지할 수 있다.

ViewModelFactory를 사용하면 액티비티를 생성했을 때 ViewModel의 새로운 인스턴스를 생성하지 않는 이유는 뭘까?

☝🏻 ViewModelFactory를 사용하면 안드로이드 시스템이 ViewModel 인스턴스를 적절하게 관리하고 캐싱한다.
➡️ 액티비티가 다시 생성되었을 때에도 기존에 생성한 ViewModel 인스턴스를 재사용하려고 시도한다.

✨ 정리해보자면 ViewModelFactory를 통해 ViewModel을 생성하면 ViewModel은 안드로이드 시스템에 의해 안전하게 관리되고 액티비티가 다시 생성 되어도 기존의 ViewModel 인스턴스를 유지하려고 노력한다.

profile
개발 공부 기록 🌱

0개의 댓글