기초다지기(8) - LiveData, DataBinding, StateFlow, SharedFlow

JongHyunSeo·2025년 3월 4일

Android 기초

목록 보기
6/7

LiveData, DataBinding

안드로이드에서 UI와 데이터를 효율적으로 관리하는 두가지 핵심요소 이다.

  • LiveData : 반응형 데이터 관리 (데이터 변경 감지 및 UI 자동 업데이트)
  • DataBinding : UI와 데이터의 직접적인 바인딩 (xml에서 직접 연결)

LiveData

Lifecycle을 인식하는 반응형 데이터 홀더이다. 데이터가 변경되면 자동으로 UI가 업데이트되며, Lifecycle을 인식하여 메모리 누수를 방지한다.

  • UI가 활성 상태일 때만 데이터가 업데이트 된다.
  • 자동 데이터 변경 감지 및 UI 업데이트
  • ViewModel과 함께 사용하여 UI 데이터 관리 최적화
  • 메모리 누수 방지 (LifecycleOwner와 연결)

ViewModelLiveData를 선언 및 변경하고, 해당 값을 View에서 Observer 등록을 통해 값이 바뀔 경우 자동으로 UI를 업데이트하게 만들 수 있으며, View가 비활성화되면 Lifecycle을 통해 자동으로 관찰이 중단된다.

DataBinding

xml 레이아웃과 데이터를 직접 연결하는 기술로 xml에서ViewModel, LiveData 등을 참조할 수 있어 코드가 간결해진다.

LiveData와 함께 사용하면 xml에서 데이터 변경을 자동으로 감지하여 반영되고, 단뱡향(@{})뿐 아니라, 양방향 데이터 바인딩(@={})도 가능하다. 양방향 데이터 바인딩의 경우, 사용자가 입력한 값이 LiveData에 자동으로 반영된다.

View단에서 binding.lifecycleOwner = this로 설정해줘야 LiveData 변경사항이 자동으로 반영된다.

StateFlow

StateFlowLiveData와 동일하게 반응형 데이터 스트림을 제공하지만 동작 방식과 사용 목적이 다르다.

LiveDataStateFlow
목적UI 상태 저장 및 변경 감지(Lifecycle-Aware)UI 상태 또는 이벤트 처리 (Flow)
초기 값필요없음필요함
Lifecycle 인식UI 활성 상태에만 데이터 전달인식하지 않음
콜드 스트림 여부observe()가 없어도 데이터 저장collect()를 호출해야 데이터 전달
UI 비활성 상태 동작UI가 비활성화되면 값 전달 XUI가 없어도 항상 최신 상태 유지
사용observe(viewLifecycleOwner)flow.collect()

위에서 주목해야하는 차이점은 LiveData는 UI가 onStop()상태가 되면 LiveData는 업데이트가 중단되며, UI가 다시 활성화되면 마지막값만 전달되지만, StateFlow는 항상 마지막 값을 유지하며 UI가 다시 활성화되면 즉시 최신 값이 전달된다는 점이다.

즉, LiveData는 UI와 직접 연결된 데이터를 관리할 때 적합하고, StateFlow는 UI와 무관하게 데이터 흐름을 유지해야할 때 적합하다.

SharedFlow

Flow 기반의 데이터 스트림을 여러 구독자와 공유할 수 있는 핫 스트림으로 주로 일회성 이벤트 처리(토스트 메시지, 네트워크 응답 등)에 사용되며, StateFlow와 달리 이전 값을 저장하지 않고 새로운 값을 바로 전달한다.

StateFlowSharedFlow
초기 값필요함필요없음
이전 값 유지항상 최신 값 유지유지하지 않음
이벤트 기반 처리XO
collect()동작최신 값 즉시 전달새로운 값이 들어올때만 전달

따라서 StateFlow로는 상태(State)를 관리하는데 적합하고, SharedFlow이벤트(Event)를 전달하는데 적합하다.

참고사항 : SharedFlowreplay 설정을 통해 최근 값을 유지할 수 있다. (replay = 1)

profile
공부는 꾸준하게

0개의 댓글