목록프로그래밍 언어/Kotlin (17)
Groo
아래 내용은 모두 해당 원글을 기반으로 요약정리한 내용입니다. 그림은 저자가 직접 제작한 것임을 알려드립니다. (출처: 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) // 통..
아래 내용은 모두 해당 원글을 기반으로 요약정리한 내용입니다. 그림은 저자가 직접 제작한 것임을 알려드립니다. (출처: Kt World) 리액티브 프로그래밍에서는 종종 여러 데이터 흐름을 하나로 합쳐 단일 Flow를 만들어 내기도 한다. 이런 Flow를 UI에서 사용하기 위해서는 StateFlow로 변환을 해주어야 한다. 우리는 이를 stateIn 함수를 통해 변환할 수 있다. stateIn 함수는 아래 세 가지 파라미터를 전달 받는다. fun Flow.stateIn( scope: CoroutineScope, started: SharingStarted, initialValue: T ): StateFlow scope: StateFlow가 Flow로부터 데이터를 구독 받을 CoroutineScope를 명시한..