[안드로이드 - 코틀린] ViewModel을 이용한 Fragment간 데이터 공유

2023. 4. 30. 18:27Android

앞에서는 기본적인 ViewModel에 대해 학습하였다. 이번에는 이번 프로젝트에서 사용하게된 Fragment간 데이터 공유 방법에 대해 알아보자

 

우리가 개발을 하다 Fragment간 데이터를 공유할 때는 일반적으로 bundle을 이용한다 bundle을 생성해 내부에 데이터를 넣어주고 arguments를 이용해 데이터를 받아준다. 하지만 이번에는 ViewModel를 이용해 공유하는 방법에 대해 설명해보겠다.

 

private lateinit var viewModel: MapViewModel

viewModel = ViewModelProvider(this)[MapViewModel::class.java]

 

현재 사용하는 기본적인 ViewModel 작성 방식이다.
 + 하나의 Activity에서 생성된 Fragment 환경임을 알아야 된다. 개별 Activity에 생성된 Fragment인 경우에는 해당 방식으로 데이터를 공유할 수 없다

 

ViewModel을 생성하면 ViewModelProvider를 이용해 ViewModel의 Onwer를 this로 선언해주며 Fragment 고유 ViewModel임을 선언해 주었다. 하지만 우리는 Fragment끼리의 데이터 공유가 필요하다.

 

이러한 경우에는 Fragment보다 상위 View인 Activity에서 공유되야 되는 ViewModel로 생성해야된다. Onwer값을 requireActivity()선언해주는 방식으로 해결할 수 있다. 이러한 경우 Fragment가 Activity를 참조하게 되어 Activity 범위의 ViewModel 인스턴스를 가져올수 있게 됩니다. 이렇게 사용하면 ViewModel이 동일한 인스턴스를 공유하게 되어 여러 Fragment에서 데이터를 공유하고 전달할 수 있습니다.

 

private lateinit var viewModel: MapViewModel

viewModel = ViewModelProvider(requireActivity())[MapViewModel::class.java]

 

 

참조 링크 

- https://developer.android.com/topic/libraries/architecture/viewmodel?hl=ko

- https://jeonyt89.medium.com/android-fragment-%EA%B0%84-viewmodel-data-%EA%B3%B5%EC%9C%A0-39b489e8aaea