안드로이드 LiveData를 하다보면 나오는 map / switchMap에 대해서 알아보겠습니다.
이름에서 나오는 느낌처럼 LiveData의 값을 변경하는 것입니다.
구글 문서에서는 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://github.com/google-developer-training/android-basics-kotlin-unscramble-app/tree/main
https://proandroiddev.com/livedata-transformations-4f120ac046fc
https://developer.android.com/reference/android/arch/lifecycle/Transformations
https://developers-kr.googleblog.com/2019/03/viewmodel-livedata-transformations.html
'Android Jetpack' 카테고리의 다른 글
Android Room - 2 (SQLite Simple Ex) (0) | 2022.01.21 |
---|---|
Android Room -1 (Room vs SQLite) (0) | 2022.01.20 |
Android LiveData - 4 (Fragment LifeCycleOwner) (0) | 2022.01.09 |
Android LiveData - 3 (Livedata vs MutableLiveData) (16) | 2022.01.02 |
Android LiveData - 2 (ViewModel + LiveData) (0) | 2022.01.02 |