
데이터의 변경을 관찰할 수 있는 Data Holder 클래스
액티비티, 프레그먼트, 서비스 등과 같은 안드로이드 컴포넌트의 생명주기를 알고 있으며, 컴포넌트가 활성 상태(STARTED나 RESUMED)일 경우에만 데이터를 업데이트 함
또한 LiveData 객체는 Observer 객체와 함께 사용됨
즉, LiveData가 가지고 있는 데이터에 어떠한 변화가 일어날 경우, LiveData는 등록된 Observer 객체에 변화를 알려주고, Observer의 onChanged()가 실행되게 됨
// Repository를 사용할 경우
val ticketList : LiveData<List<TicketResponse>> = repository.getName()
// Repository를 사용하지 않을 경우
private var _ticketList = MutableLiveData<List<TicketResponse>>()
val ticketList: LiveData<List<TicketResponse>>
get() = _ticketList
val ticketListObserver = Observer<List<TicketResponse>> {
fragmentTicketListRv.replaceAll(it)
}
mainVm.tickerList.observe(this@MainFragment, tickerListObserver)
+)
안드로이드 스튜디오 버전 3.1 이상부터는 Observable 필드의 사용 대신 LiveData를 데이터바인딩 코드에서 사용하는 것을 권장하고 있음
private val sharedViewModel: SurveyViewModel by activityViewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val fragmentBinding = RouletteBinding.inflate(inflater, container, false)
binding = fragmentBinding
binding.roulette.apply {
rouletteSize = rouletteData.size
setRouletteDataList(rouletteData)
}
sharedViewModel.picked.observe(viewLifecycleOwner) {
binding.roulette.rouletteSize = it.size
binding.roulette.setRouletteDataList(it)
}
}
LiveData는 observe()를 사용해 Observer 객체와 결합함
첫 파라미터에 viewLifeCycleOwner를 전달해서, 프래그먼트의 뷰가 살아있는 동안에만 데이터의 변경을 관찰할 수 있도록 해줌 (onCreateView ~ onDestroyView 사이에만)

MVVM 아키텍처에서 Repository를 사용하는 경우,
-> 액티비티가 값을 직접 수정하지 못하도록, Observer-LiveData-MutableLiveData 구조를 사용함
LiveData는 데이터 읽기만 가능하므로, 데이터를 쓰려면 MutableLiveData를 사용해야 함
즉, LiveData는 public으로 MutableLiveData는 private으로 선언해서 외부에서는 관찰을, 내부에서는 수정을 하는 방식이 되어야 함
아키텍처를 알아야 앱 개발이 보인다, 옥수환 저
https://ardor-dev.tistory.com/78
https://developer.android.com/topic/libraries/architecture/livedata?hl=ko
https://velog.io/@jojo_devstory/Android-LiveData...%EB%84%8C-%EB%88%84%EA%B5%AC%EB%83%90
https://developer.android.com/codelabs/basic-android-kotlin-training-livedata?hl=ko#3
https://comoi.io/300