데이터 스트림이며 코루틴 상에서 반응형 프로그래밍을 지원하기 위한 구성요소이다
중간에 갱신되는 값을 받아올 수 있도록 함
builder로 생성, suspend를 사용하지 않아도 됨
프로듀서가 비동기적으로 생성, 컨슈머가 소비함
Livedata는 생명주기에 영향을 받음
Coroutine Scope에서 사용, 풍부한 연산자로 유연하게 데이터 변화 가능
안드로이도 의존성에서 자유로움, Cold Stream
-> Sharedflow로 대체!!
두가지 방식의 특징을 가질 수 있음
데이터 저장소 역할과 데이터 스트림까지 할 수 있다. UI에서 StateFlow를 구독하여 UIState를 업데이트 하면 재구성시 다시 요청 할 필요가 없어짐
class LocationRepository(
private val locationDataSource: LocationDataSource,
private val externalScope: CoroutineScope
) {
val locations: Flow<Location> =
locationDataSource.locationsSource.stateIn(externalScope, WhileSubscribed(), EmptyLocation)
}
참조 : Dev World의 블로그