Android Jetpack

Android LiveData - 5 (Livedata Transformations map / switchMap)

개복치 개발자 2022. 1. 15. 21:56

 안드로이드 LiveData를 하다보면 나오는 map / switchMap에 대해서 알아보겠습니다.

 

 이름에서 나오는 느낌처럼 LiveData의 값을 변경하는 것입니다.

 

 구글 문서에서는 Transformations이라고 설명되어 있는데

 

https://developer.android.com/reference/android/arch/lifecycle/Transformations

 

 LiveData를 변경하는 방법 중 map/switchMap에 대해서 알아보겠습니다.

 

 그런데, 이걸 왜 쓰고, 어떻게 쓰는지 한번 확인해보겠습니다.

 

 하나의 데이터가 변경될 때, 다른 데이터들도 변경해줘야 하는 경우가 있습니다.

 

 어떤 경우에 사용하면 좋을지 한번 간단한 앱을 보면서 살펴보겠습니다.

 

 우선은 Transformations을 사용하지 않고 사용했을 때입니다.

 

 숫자(x)를 입력하면 x+x 와 x*x 가 나오는 앱입니다.

 

 

 이 것을 아래와 같이 코드를 작성했습니다.

 

 위의 코드에서는 liveCount라고 livedata를 만들어서 관찰한 후, 변경을 해줬습니다.

 

 이 코드를 좀 더 아름답게 변경해볼 수는 없을까 해서 변경을 해봤습니다.

 

 우선 코드를 변경하기전에 하나 짚고 넘어가야 할 부분은

 

Transformations map의 경우 값을 return하고

Transformations switchmap의 경우 livedata를 return 합니다.

 

 자, 이게 무슨뜻인지 아래의 코드를 통해서 이해해보겠습니다.

 

 mapLiveData와 switchMapLiveData라는 애들을 만들었습니다.

 

 Activity와 ViewModel을 아래와 같이 변경했을 때, 동일하게 동작하는 것을 볼 수 있습니다.

 

 

 아래와 같이 init을 생략하고 사용해줄 수 있습니다.

 

private var mutableCount = MutableLiveData(0)
val liveCount : LiveData<Int>
    get() = mutableCount

 

 

 

 

 - 참고

 

https://developer.android.com/codelabs/basic-android-kotlin-training-livedata?hl=nb&continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-kotlin-unit-3-pathway-3%3Fhl%3Dnb%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-training-livedata#13 

 

ViewModel과 함께 LiveData 사용하기  |  Android Developers

이 Codelab에서는 아키텍처 구성요소 중 하나인 LiveData를 사용하는 방법을 알아봅니다. ViewModel의 앱 데이터를 LiveData로 변환합니다. 또한 LiveData에서 변경사항을 관찰하고 UI를 자동으로 업데이트

developer.android.com

 

https://github.com/google-developer-training/android-basics-kotlin-unscramble-app/tree/main

 

GitHub - google-developer-training/android-basics-kotlin-unscramble-app

Contribute to google-developer-training/android-basics-kotlin-unscramble-app development by creating an account on GitHub.

github.com

 

https://proandroiddev.com/livedata-transformations-4f120ac046fc

 

LiveData transformations

LiveData is a great tool to use when working with Android Architecture Components. Before I knew how to use the Transformations class, I…

proandroiddev.com

 

https://developer.android.com/reference/android/arch/lifecycle/Transformations

 

Transformations  |  Android Developers

added in version 1.0.0 belongs to Maven artifact android.arch.lifecycle:livedata:1.1.1 Transformations The android.arch Architecture Components packages are no longer maintained. They have been superseded by the corresponding androidx.* packages. See andro

developer.android.com

https://developers-kr.googleblog.com/2019/03/viewmodel-livedata-transformations.html

 

ViewModel을 능가하는 LiveData — Transformations와 MediatorLiveData를 사용하는 반응형 패턴

여러 해 동안 안드로이드 개발자들 사이에서 반응형 구조(Reactive Architecture)는 꾸준히 인기있던 주제였는데 보통 RxJava를 예시로 설명합니다(아래의 Rx 섹션 참조). 반응형 프로그래밍은 데이터가

developers-kr.googleblog.com