기록

[Android] LiveData 본문

[Study]/Android

[Android] LiveData

Dannnnnn 2022. 9. 29. 05:45
반응형

LiveData

Android Studio 3.1 이상부터는 LiveData와 ViewModel이 데이터바인딩과 함께 작동한다.

(Databinding Supports for ViewModel and LiveData)

 

binding.viewModel = viewModel
binding.setLifecycleOwner = this

 

위와 같이 xml 레이아웃에 뷰모델과 LifecycleOwner을 바인딩야하면 xml에 바인딩한 LiveData를 제대로 관찰할 수 있다.

따라서 xml에 바인딩 수식으로 ViewModel과 LiveData에 대한 참조를 표현할수 있다.

 

데이터바인딩을 사용하면 더 이상 UI단에서 Observer를 수동으로 설정할 필요가 없다.

따라서 LiveData Observer 코드를 만드는 대신 모든 상용구 코드를 제거할 수 있고, 대신 xml의 뷰는 LiveData를 직접 참조한다.

 

LiveData is an observable data holder. It is lifecycle aware.

라이브데이터의 특이한 점은 수명주기를 인식하는 것이다.

즉, UI가 화면 안에 있는지, 화면 밖에 있는지, 파괴되었는지를 인식한다.

 

LiveData 수명주기 인식의 이점

- Activity/Fragment가 화면에 없으면 LiveData가 쓸모없는 UI 업데이트를 트리거하지 않는다.

- UI가 파괴되면 LiveData에 의해 관찰 연결이 자동으로 정리되기 때문이다.

- 따라서 화면을 벗어나거나 파괴된 UI를 다시 그려지도록 실수로 트리거하지 않을 것이다.

(Thus, you never accidently trigger an activity or fragment that is offscreen or destroyed to redraw itself)

 

이것은 부분적으로 Framework 클래스에서도 사용되는 Lifecycle 라이브러리의 인터페이스와 클래스 때문에 가능하다.

이러한 클래스들은 아래와 같다.

- Lifecycle : 수명주기와 그 상태를 나타내는 객체

- LifecycleOwner : 액티비티와 프래그먼트와 같이 수명주기가 있는 객체에 대한 인터페이스

- LifecycleObserver : Lifecycle을 관찰하기 위한 인터페이스

 

LiveData는 수명주기 관찰자이다.

우리는 이를 통해 수명주기를 직접 처리해야할 필요성이 사라지며, 이것이 LiveData의 기본이자 유용한 이유이다.

 

LiveData의 변환

LiveData는 또한 커스텀 변환을 위해 map(), switchMap(), MeditatorLiveData 클래스를 제공한다.

 

map()

LiveData 객체에 저장된 값에 함수를 적용하고, 다운스트림으로 값을 보낸다.

(Applies a function on the value stored in the LiveData object, and propagates the result downstream.)

 

switchMap()

map()과 유사하게 LiveData 객체에 저장된 값에 함수를 적용하고 결과를 언랩하여 다운스트림으로 디스패치한다.

차이점은 switchMap()에 전달된 함수는 반드시 LiveData 객체를 반환해야 한다.

(Similar to map, applies a function to the value stored in the LiveData object and unwraps and dispatches the result downstream. The function passed to switchMap() must return a LiveData object.)

 

 

MeditatorLiveData

MediatorLiveData는 여러 LiveData 소스를 병합할 수 있는 LiveData의 하위 클래스이다.

원래의 LiveData 소스 개체가 변경될 때마다 MediatorLiveData 개체의 관찰자가 트리거된다.

(MediatorLiveData is a subclass of LiveData that allows you to merge multiple LiveData sources. Observers of MediatorLiveData objects are then triggered whenever any of the original LiveData source objects change.)

 

 

 

참고 : https://developer.android.com/topic/libraries/architecture/livedata

반응형