쏭식
Ssongcode;
쏭식
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • JAVA (21)
      • Basic (21)
    • Kotlin (14)
      • Basic (14)
    • Android (64)
      • Basic (24)
      • JETPACK (30)
      • Compose (8)
      • 파고들기 (2)
    • Project (4)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Android
  • livedata
  • 배열
  • 알고리즘
  • ViewModel
  • Room
  • AAC
  • Adapter
  • 상속
  • 코틀린
  • 코틀린코테
  • Kotlin
  • DataBinding
  • 코딩테스트
  • 백준
  • 자료구조
  • 변수
  • 컴포즈
  • 객체지향
  • 프로젝트회고
  • 자바
  • workmanager
  • 코드업100제
  • compose
  • 메소드
  • 기초100제
  • mvvm
  • 리사이클러뷰
  • Jetpack
  • 코테

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

Android/JETPACK

[JETPACK개론] Map / SwitchMap

2022. 8. 20. 23:59

LiveData를 사용하다 보면 여러 가지의 데이터를 다루게 되고, 이러한 데이터들이 함께 바껴야하는 상황도 많이 만나게 된다.

데이터베이스와 네트워크 통신을 도와주는 라이브러리와 함께 사용되기도 하는데

 

이 때 Transformation의 Map과 SwitchMap 메소드를 사용한다!!

 

간단한 실습을 통해 이 두 가지를 알아보자!

EditText에 숫자를 입력하고 버튼을 누르면 자동으로 그 숫자끼리 더해지고, 곱해지는 프로그램을 구현해보자.

예를 들어, 10을 입력하면 20과 100이 출력되는 것이다.

 

위의 메소드를 모두 이용한다고하면, 10이라는 라이브데이터로 20과 100으로 변환시키는 것에서 이용할 수 있을 것이다!

private var _mutableCount = MutableLiveData(0)

val liveCount : LiveData<Int>
get() = _mutableCount

fun setLiveDataValue(count : Int){
    _mutableCount.value = count
}

위와 같이 ViewModel을 만들어주고,

binding.btnArea.setOnClickListener {
    val count = binding.inputArea.text.toString().toInt()
    viewModel.setLiveDataValue(count)
}

버튼을 클릭했을 때 LiveData의 값에 10을 넣어보자!

물론 여기서 다음과 같이 Activity클래스에서 설정하여 데이터를 변화시킬 수 있다.

        viewModel.liveCount.observe(this, Observer {
            //이를 ViewModel에서 하고 싶다는 생각이 들었음
//            binding.resultArea1.text = (it+it).toString()
//            binding.resultArea2.text = (it*it).toString()
        })

하지만, 우리는 LiveData를 ViewModel에서 다루고 있었고, 이 데이터를 변경하는 것 또한 ViewModel에서 하는 것을 원했다.

따라서 다음과 같이 ViewModel에 추가해주었다!

Map

val mapLiveData = Transformations.map(liveCount){
    it+it
}

Transformations의 map메소드를 통해 값을 변경해주었고, 액티비티에서 observer를 통해 다음과 같이 텍스트까지 변경을 완료했다!

viewModel.mapLiveData.observe(this, Observer {
    binding.resultArea1.text = it.toString()
})

이제 SwitchMap도 사용해보자!

SwitchMap

val switchLiveData = Transformations.switchMap(liveCount){
        changeValue(it)
    }

    fun changeValue(count : Int) : MutableLiveData<Int> {
        val testLiveData = MutableLiveData(count * count)
        return testLiveData
    }
}

ViewModel에 위의 코드를 추가해주어 해당 liveData의 값을 제곱하는 변형데이터를 return하는 함수를 만들어준다.

이도 마찬가지로 다음과 같이 액티비티에 추가해주면 끝!!

viewModel.switchLiveData.observe(this, Observer {
    binding.resultArea2.text = (it).toString()
})

간단히 Map과 SwitchMap을 사용해봤는데, 이 둘의 정확한 차이점을 모르겠다....

더 관련된 문서를 찾아보면서 따로 정리하는 글을 포스팅해야겠다!!!!!!!!

 

 

GitHub - SsongSik/JetPack_Android_Practice: Android practice using the Jetpack library

Android practice using the Jetpack library. Contribute to SsongSik/JetPack_Android_Practice development by creating an account on GitHub.

github.com

 

저작자표시 (새창열림)

'Android > JETPACK' 카테고리의 다른 글

[JETPACK개론] Retrofit  (0) 2022.08.24
[JETPACK개론] DataBinding + ViewModel + LiveData  (0) 2022.08.21
[JETPACK개론] Fragment LiveData / LifeCycleOwner  (0) 2022.08.19
[JETPACK개론] LiveData 와 MutableLiveData  (0) 2022.08.18
[JETPACK개론] LiveData  (0) 2022.08.17
    'Android/JETPACK' 카테고리의 다른 글
    • [JETPACK개론] Retrofit
    • [JETPACK개론] DataBinding + ViewModel + LiveData
    • [JETPACK개론] Fragment LiveData / LifeCycleOwner
    • [JETPACK개론] LiveData 와 MutableLiveData
    쏭식
    쏭식

    티스토리툴바