Android ViewModel 초기화 방법

98oys·2022년 5월 18일
2

안드로이드

목록 보기
8/20

오늘은 뷰모델을 초기화하는 3가지 방법을 알아보겠습니다!😊

1. ViewModelProvider를 이용한 초기화

val viewModel = ViewModelProvider(this@MainActivity).get(___ViewModel::class.java)

ViewModelProvider의 파라미터로 MainActivity(View)를 전달하고 그로부터 ViewModel Class를 넣어 ViewModel을 get 합니다. 이로부터 생겨난 ViewModel은 MainActivity의 생명주기를 따르는 ViewModel이 됩니다.

2. by viewModels()를 이용한 초기화

val viewModel: __ViewModel by viewModels()

해당 뷰모델이 초기화되는 Activity 혹은 Fragment의 생명주기에 종속됩니다.

3. by activityViewModels()를 이용한 초기화

private val viewModel: __ViewModel by activityViewModels()

fragment에서만 사용 가능한 뷰모델 초기화 방식입니다.
Fragment는 Activity에 종속되어있기 때문에 fragment가 생성한 Activity의 생명주기에 뷰모델을 종식시킵니다.
activity(ViewModelStoreOwner)를 공유하는 Fragment간의 데이터 전달이 가능해집니다.

😮 주의할 점
activityViewModels를 사용하면 Activity가 살아있는동안 뷰모델이 메모리에 올라가 있습니다.
Fragment A와 Fragment B에서 데이터 전달 목적으로 사용하려고 했지만 Activity의 container는 여러 Fragment를 가지고 있을 수 있습니다.
의도하지 않은 Fragment C와 D에서 접근하여 잘못 사용될 가능성이 있습니다
따라서 Fragment간의 데이터 전달은 activityViewModels 보다는 Bundle 을 사용하여 데이터 전달하는 것이 좋습니다.

profile
Android Developer, Department of Information and Communication Engineering, Inha University

0개의 댓글