Fragment간에 ViewModel 공유하기(Feat. Fragment-ktx)

지프치프·2022년 6월 28일
0

Android

목록 보기
53/89
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


개요

Fragment 간에 데이터를 공유하고 싶을 때가 있다.
ViewModel이 등장하기 전 까지는 Activity에 값을 저장한 뒤
Activity에 접근해서 데이터를 가져오는 방식을 썼지만
ViewModel의 등장으로 더 간편하게 데이터를 공유할 수 있게 되었다.

ViewModel

ViewModel은 Jetpack의 구성요소로써
Acitivity나 Fragment와 같은 View의 데이터를 보관하기에 적합하다.

LifeCycle 또한 Activity에 종속되며
Activity가 종료되면 onCleared()를 통해 소멸되니
메모리 관리 면에서도 편리하다.

그리고 이는 Activity가 종료되지 않는 한 ViewModel은 살아있기 때문에
Activity 아래의 Fragment들 사이에서 일관성 있는 데이터 공유를 보장할 수 있다.

구현

Fragment-ktx를 통해 Activity와 Fragment간 viewModel 공유를 손쉽게 구현할 수 있다.

먼저 app 수준의 builg.gradle에서 의존성을 추가한다.

implementation "androidx.fragment:fragment-ktx:1.4.1"

그리고 Activity에서 ViewModel을 아래와 같이 선언한다.

private val viewModel: MyViewModel by viewModels()

기존에 viewModelProvider를 통한 방법보다 더욱 간결하다.

그리고 Fragment에서는 아래와 같이 선언한다.

private val myVM: MyViewModel by activityViewModels()

살펴보면 Activity나 Fragmnet나 구현 방법은 매우 유사하다.
그저 by문 뒤에 오는 메소드의 차이라고 볼 수 있다.

개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글