Flow
는 비동기적인 흐름을 나타냅니다.
public interface Flow<out T> {
public suspend fun collect(collector: FlowCollector<T>)
}
List와 Set은 한번에 모든 연소의 계산이 완료된, 한번에 모든 값을 만드는 컬렉션입니다.
원소를 하나씩 계산할 때는, Sequence를 사용하는 것이 하나의 방법이 됩니다. 다만, 시퀀스 빌더 내부에 중단점이 있다면, 스레드는 블로킹되어 문제가 발생할 수 있습니다. 그렇기에 시퀀스 빌더 내부에서는 코루틴을 사용할 수 없습니다.
그렇기에 이런 상황에서는 Flow
를 사용해야 합니다. Flow
를 사용하면 코루틴이 연산을 수행하는 데 필요한 기능을 전부 사용할 수 있습니다.
collect와 같은 Flow
의 최종 연산은 스레드를 블로킹하는 대신 코루틴을 중단시킵니다. Flow
처리는 취소 가능하며, 구조화된 동시성을 갖추고 있습니다.
Flow
의 최종 연산은 중단 가능하며, 연산이 실행될 때 부모 코루틴과의 관계가 정립됩니다.
모든 Flow
는 몇 가지 요소로 구성됩니다.
Flow
는 어딘가에서 시작되어야 합니다. Flow
빌더, 다른 객체에서의 변환, 또는 헬퍼 함수로부터 시작됩니다.Flow
의 마지막 연산은 최종 연산이라 불리며, 중단 가능하거나 스코프를 필요로 하는 유일한 연산입니다.Flow
중간의 Flow
를 변경하는 중간 연산을 가질 수 있습니다.