: 순차적으로 값을 배출하는 비동기 데이터 스트림
suspend 함수는 1개의 값을 반환하기 때문에 비동기로 여러개의 값을 계산하여야 할 때 Flow를 사용한다.
코루틴을 기반으로 빌드되며, CoroutineScope안에서 동작한다.
suspend 가능한 iterator이다.
Flow는 실시간 데이터 업데이트 및 데이터 스트림에 적합하다.
cold stream이다.
새로운 data가 들어오면 이전 데이터가 처리되는 것을 멈추고 새로운 데이터를 처리한다.
순차적으로 데이터를 처리하는 collect의 데이터의 지연이 발생하는 것을 보완한 것이다.
Flow->SharedFlow->StateFlow
value를 받을 수 없기 때문에 hot stream으로 동작하도록 만든 것.
Livedata에서 SharedFlow로 변경하는 추세이다.
stateIn(scope,started,initialValue)
SharingStarted의 3가지 옵션
1. SharingStarted.Eagerly: 콜렉터 없어도 바로 sharing, 중간 중지X
2. SharingStarted.Lazily: 콜렉터 등록 후 바로 sharing, 중간 중지X
3. SharingStarted.WhileSubscribed: 콜렉터 등록 후 바로 sharing 콜렉터 사라지면 바로 중단
flow dispatcher를 변경하려면 flowOn
함수 이용