[Kotlin] StateFlow

이도연·2025년 7월 12일
0

기초 문법

목록 보기
11/11

state 는 UI 와 관련된 데이터를 저장하고 관리하는데 사용되는 상태홀더 ViewModel 을 통해 관리되다. 이러한 state 데이터를 다루기 위해 LiveData 를 사용한다. LiveData 는 Activity LifeCycle 에 반응하여 데이터 변경 사항을 observing 한다.

Activity 가 있는 UI 레이어가 아닌, Domain 레이어와 상호작용해야한다면..
Flow 를 사용해야한다.

StateFlow


  • hot flow. 기본적으로 collector 가 없어도, 상태를 유지한다.
  • LiveData 와 매우 유사하지만 state 를 표현하기 때문에 초기값이 필요하다. 하나의 값만 업데이트 할 수 있다.

cold stream?
flow 를 수집하는 각각의 collector 들이 데이터를 수집할 때 마다 새로운 데이터 스트림 생성한다. collector 들은 각각의 개별 데이터 스트림에서 데이터 수집. 스트림 행성 후 이를 소비하지 않으면, 아무것도 수행하지 않는다. ex)Flow
hot stream?
flow 를 수집하는 각각의 collector 들이 데이터 스트림을 공유하여 동일한 데이터를 수집. 구현에 따라 collector 유/무에 따라 시작되기도 하지만, 기본적으로 collector 가 없어도 Provider 는 데이터 스트림을 제공. ex)StateFlow, SharedFlow

[!TIP]
일반적인 Flow 는 상태를 가질 수 없다. 고로, 데이터 홀더의 역할 수행 x




private val _artistProfileUiState = MutableStateFlow(ArtistProfile())
val artistProfileUiState: StateFlow<ArtistProfile> = _artistProfileUiState.asStateFlow()
항목StateFlowMutableStateFlow
역할읽기 전용 상태 흐름읽고 + 값 변경 가능
사용 위치UI (Activity, Fragment 등)ViewModel 내부
값 변경❌ 안 됨 (val only)✅ 가능 (value =, .update {} 등)
생성 방법.asStateFlow()로 생성MutableStateFlow(초기값) 생성
외부 노출보통 StateFlow로 외부에 노출내부에서만 사용

사용 예제

MutableStateFlow: ViewModel 내부에서 상태를 변경할 때

StateFlow: UI에서는 값만 관찰하면 될 때 (ViewModel 외부 노출)

0개의 댓글