코딩하는 일용직 노동자

Coroutine callbackFlow란? 본문

안드로이드

Coroutine callbackFlow란?

bacass 2024. 3. 17. 16:35
callbackFlow는 콜백 함수를 사용하여 데이터 스트림을 생성하는 코루틴 플로우 함수입니다. 비동기 작업을 수행하고 데이터를 스트림 방식으로 제공하는 경우에 유용합니다.

작동 방식:

callbackFlow 함수는 콜백 함수를 인수로 받습니다.
콜백 함수는 데이터가 사용 가능할 때마다 offer 함수를 호출하여 데이터를 제공합니다.
callbackFlow 함수는 데이터 스트림을 생성하고 반환합니다.
구독자는 collect 함수를 사용하여 데이터 스트림을 수집합니다.
장점:

비동기 작업을 쉽게 코루틴 플로우와 함께 사용할 수 있습니다.
데이터 스트림을 백프레셔 방식으로 제공하여 메모리 누수를 방지할 수 있습니다.
콜백 함수를 통해 데이터 스트림을 유연하게 제어할 수 있습니다.
단점:

callbackFlow 함수는 콜백 함수를 사용하기 때문에 코드가 더 복잡해질 수 있습니다.
콜백 함수는 코루틴 스코프 내에서 실행되어야 합니다.
fun getDataStream(): Flow<Int> = callbackFlow { callback ->
    // 비동기 작업을 수행하는 코드
    // ...
    
    // 데이터가 사용 가능할 때마다 offer 함수를 호출하여 데이터를 제공합니다.
    callback.offer(1)
    callback.offer(2)
    callback.offer(3)
    
    // 작업이 완료되면 close 함수를 호출하여 데이터 스트림을 종료합니다.
    callback.close()
}

fun main() {
    val flow = getDataStream()
    
    flow.collect { data ->
        // 데이터를 처리하는 코드
        // ...
    }
}