LiveData
LiveData
Jetpack 의 lifecycle - extensions 라이브러리에 있는 데이터 홀더 클래스 이다.
Room 에서 LiveData를 사용한다.
라이브 데이터의 목적 앱의 서로 다른 부분 간에 데이터 전달을 쉽게 만드는 것이다. 라이브 데이터는 스레드 간에도 데이터를 전달할 수 있어서, 백그라운드 스레드에서 메인 스레드로 데이터를 전달할 수 있다.
Room DAO 의 쿼리에서 LiveData를 반환하도록 구성하면, Room은 백그라운드 스레드에서 쿼리 작업을 자동 실행한 후그 결과를 LiveData 객체로 반환해준다. 즉, 액티비티나 프래그먼트에서는 LiveData 객체를 관찰하도록 설정만 하면 자동으로 처리가 된다는 말이다.그리고 LiveData 객체가 준비되면 메인 스레드의 액티비티나 프래그먼트에 통보되므로 이 때 라이브 데이터를 사용해서 데이러를 처리하면 된다.
옵저버 (Observer) 라이브 데이터를 관찰하는 역할을 한다.
라이브 데이터는 붙어있는 액티비티나 프래그먼트의 생명주기와 동일하게 움직인다. 그래서 이러한 컴포넌트를 생명주기 -인식 -컴포넌트 (Lifecycle- aware-component) 라고도 한다.
LiveData.observe(LifecycleOwner, Observer) LiveData 인스턴스에 옵저버를 등록하기 위해 사용하는 것이다.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
crimeListViewModel.crimeListLiveData.observe(
viewLifecycleOwner,
Observer { crimes ->
crimes?.let{
Log.i(IK, "Got crimes ${crimes.size}")
updateUI(crimes)
}
}
)
}
프래그먼트 코드에서 onViewCreated안에 옵저버를 등록해준다. 이렇게 하는 것의 의미는, "Live Data를 사용할 것이고, 이 프래그먼트에 옵저버를 등록하여 데이터의 변경을 관찰할 것입니다." 라는 의미이다. 즉, 이 말은 데이터가 변경되면, 옵저버는 이것을 확인하여 바로 UI에 해당 데이터를 변경하여 반영하겠다는 뜻이다.
1. viewLifeCycleOwner2. Observer{} 와 같은 함수는 observer()의 두 개의 파라미터이다.
1번은 당연히 생명주기를 확인하고 연동하는 객체이다. 2번은 Observer인터페이스를 구현하는 객체이다. 즉 옵저버를 뜻한다. updateUI를 통해 UI에 자동반영되도록 하는 것을 볼 수 있다.
'Programming > Android' 카테고리의 다른 글
Frag to Frag with Data (0) | 2021.07.28 |
---|---|
Thread (0) | 2021.07.27 |
Repository Pattern (0) | 2021.07.27 |