LiveData는 Map 또는 SwitchMap으로 데이터를 변환시킬 수 있다.

 

MainActivity.kt

// LiveData Transformations

class MainActivity : AppCompatActivity() {

    private lateinit var binding : ActivityMainBinding
    private lateinit var viewModel: MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)

        viewModel.liveCount.observe(this, Observer {
            // binding.resultArea1.text = (it + it).toString()
            // binding.resultArea2.text = (it * it).toString()
        })

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

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

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


    }
}
 

ViewModel.kt

class MainViewModel : ViewModel() {

    // Transformations -> map / switchMap

    // map -> 값을 return

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

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

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

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

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


}
 

 

Map과 SwitchMap의 차이가 뭔지 찾아보았다.

 

1.리턴 타입의 차이가 있다.

map 은 map() 내부에서 LiveData<X>의 객체를 반환한다. 데이터 변환 처리함수에서 X를 반환.

switchMap()은 데이터 변환을 처리하는 함수에서 LiveData<X>를 반환한다.

 

2.map()과 switchMap() 을 일대일 정적 변환 , 일대일 동적 변환이라 표현도 한다.

 

3.주로 시간이 오래 안걸리는 작업은 map s()에서, 오래 걸리는 작업은 switchMap()에서 한다.

 

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

ViewModel + LiveData + LifeCycleOwner  (0) 2022.11.22
Fragment - LiveData / LifeCycleOwner  (0) 2022.11.22
LiveData와 MutableLiveData  (0) 2022.11.22
ViewModel과 LiveData  (0) 2022.11.22
LiveData  (0) 2022.11.21

+ Recent posts