목록2024/11 (4)
안드로이드 개발자 노트
코틀린 코루틴의 플로우는 생각하는 것보다 간단한 개념이며, 중간 가능한 람다식에 몇 가지 요소를 추가한 거라고 생각하면 된다. Flow 이해하기 간단한 람다식을 실제 플로우처럼 만들어보는 예제이다.먼저, 간단한 람다식이다.fun main() { val f: () -> Unit = { print("A") print("B") print("C") } f() // ABC f() // ABC}여기서 내부에 지연이 있는 람다식 suspend로 만들면 다음과 같다.suspend fun main() { val f: suspend () -> Unit = { print("A") delay(1000) print("B") ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/boCSK3/btsKUFpJkXT/gVyC7tplvSwZP1xaQoWKC1/img.png)
플로우(flow)는 비동기적으로 계산해야 할 값의 스트림을 나타낸다.flow 인터페이스 자체는 떠다니는 원소들은 모으는 역할을 하며, 플로우의 끝에 도달할 때까지 각 값을 처리하는 걸 의미한다(flow의 collect는 컬렉션의 foreach와 비슷).Flow의 유일한 멤버함수는 collect이며, Iterable과 Sequence와 비슷하다.interface Flow { suspend fun collect(collector: FlowCollector)}interface Iterable { operator fun iterator(): Iterator}interface Sequence { operator fun iterator(): Iterator} 플로우와 값들을 나타내는 다른 방법들의..
핫 데이터 스트림: 데이터를 지속적으로 발행하며 구독자가 공유하는 실시간 스트림이다. 과거 데이터를 놓칠 가능성이 있지만, 실시간성을 요구하는 상황에 적합하다.콜드 데이터 스트림: 구독자마다 독립적인 데이터 흐름을 생성하여 항상 처음부터 데이터를 제공하며, 비동기 작업이나 기록된 데이터를 처리하는 데 유용하다. 핫 채널, 콜드 플로우 플로우는 다음과 같이 생성할 수 있다.val flow = flow { while (true) { val x = computeNextValue() emit(x) }}이는 채널을 생성하는 produce와 비슷한 형태의 빌더인 것을 알 수 있다.val channel = produce { while (true) { val x..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bu3ZiL/btsKISwJaCB/feHEipYsw2FDTKlNQ15mQK/img.png)
채널(Channel) 코루틴 채널(coroutine channel)은 비동기 프로그래밍에서 데이터를 코루틴 간의 통신을 위해 사용되는 구조이다. 채널은 송신자와 수신자의 수에 제한이 없으나, 채널의 양쪽 끝에 각각 하나의 코루틴만 있는 경우가 일반적이다.채널을 통해 전송된 모든 값은 단 한 번만 받을 수 있다.채널은 두 개의 인터페이스를 구현한 하나의 인터페이스이다.interface SendChannel { suspend fun send(element: E) fun close(): Boolean // ...}interface ReceiveChannel { suspend fun receive(): E fun cancel(cause: CancellationException?) ..