Flow는 비동기적인 흐름을 나타냅니다.

public interface Flow<out T> {
    public suspend fun collect(collector: FlowCollector<T>)
}

Flow와 값을 나타내는 다른 방법들의 비교

List와 Set은 한번에 모든 연소의 계산이 완료된, 한번에 모든 값을 만드는 컬렉션입니다.

원소를 하나씩 계산할 때는, Sequence를 사용하는 것이 하나의 방법이 됩니다. 다만, 시퀀스 빌더 내부에 중단점이 있다면, 스레드는 블로킹되어 문제가 발생할 수 있습니다. 그렇기에 시퀀스 빌더 내부에서는 코루틴을 사용할 수 없습니다.

그렇기에 이런 상황에서는 Flow를 사용해야 합니다. Flow를 사용하면 코루틴이 연산을 수행하는 데 필요한 기능을 전부 사용할 수 있습니다.

Flow의 특징

collect와 같은 Flow의 최종 연산은 스레드를 블로킹하는 대신 코루틴을 중단시킵니다. Flow 처리는 취소 가능하며, 구조화된 동시성을 갖추고 있습니다.

Flow의 최종 연산은 중단 가능하며, 연산이 실행될 때 부모 코루틴과의 관계가 정립됩니다.

Flow 명명법

모든 Flow는 몇 가지 요소로 구성됩니다.

실제 사용 예