목록프로그래밍 언어/Kotlin (18)
Groo
아래 내용은 모두 해당 원글을 기반으로 요약정리한 내용입니다. 그림은 저자가 직접 제작한 것임을 알려드립니다. (출처: Kt World) Flow는 여러 Flow를 합쳐 하나의 Flow로 변환할 수 있도록 돕는 Flattening Operator를 제공한다. flatMapConcat은 Flattening Operator의 대표적인 연산자 중 하나이며 여러 Flow를 연결한다. @FlowPreview public fun Flow.flatMapConcat(transform: suspend (value: T) -> Flow): Flow = map(transform).flattenConcat() flatMapConcat은 내부에서 아래 두 가지 과정을 통해 여러 Flow를 하나로 합친다. transform 변수..
아래 내용은 모두 해당 원글을 기반으로 요약정리한 내용입니다. 그림은 저자가 직접 제작한 것임을 알려드립니다. (출처: Kt World) 데이터의 발행이 소비의 속도보다 빠를 때 collectLatest를 활용하면 중간 데이터는 하나도 얻지 못하고 마지막 데이터만 얻는다. conflate를 활용하면 새로운 데이터가 발행되더라도 이미 시작한 데이터 소비는 끝날 때까지 진행하고 해당 소비가 끝난 시점에서 가장 최신에 발행된 데이터를 기준으로 소비를 이어서 다시 진행한다. val feedbackFlow = flow { for (i in 1..50) { emit(i) delay(1000) // 피드백 생성 소요시간 } } fun reflectFeedback() { lifecycleScope.launch { fe..
아래 내용은 모두 해당 원글을 기반으로 요약정리한 내용입니다. 그림은 저자가 직접 제작한 것임을 알려드립니다. (출처: Kt World) Flow는 emit을 통해 데이터를 발행하고 collect의 action 파라미터에 의해 소비된다. collect의 action 블록에서는 발행된 데이터를 순차적으로 받아 suspend fun을 수행한다. public suspend inline fun Flow.collect(crossinline action: suspend (value: T) -> Unit): Unit = collect(object : FlowCollector { override suspend fun emit(value: T) = action(value) }) collect는 새로운 데이터가 발행되더라..
아래 내용은 모두 해당 원글을 기반으로 요약정리한 내용입니다. 그림은 저자가 직접 제작한 것임을 알려드립니다. (출처: Kt World) Flow의 collect를 사용하면 하나의 Coroutine에서 발행과 소비가 함께 일어난다. 데이터를 발행하고 해당 데이터를 소비했으면 그 후에 다음 데이터가 발행된다, 이처럼 발행과 소비는 동기적으로 진행된다. val bankFlow = flow { for (num in 1..50) { emit(num) delay(1000) // 은행 직원 휴식 시간 } } fun visitBank() { lifecycleScope.launch { bankFlow.onEach { println("${it}번 고객님 차례입니다.") }.collect { delay(5000) // 통..