[Android(Kotlin)] 코루틴(Coroutine) 다시 공부하기 - 4 (suspending 함수 작성)

업데이트:

카테고리:

태그: , ,

Suspending 함수 작성하기

기본적으로는 순차적이다.

원격 서비스 호출 또는 계산 등의 유용한 작업을 수행하는 suspend 함수가 정의되어 있다고 가정하자. (다음 예제는 단순한 예시의 목적으로 잠깐의 지연이 작업의 수행을 뜻한다.)

suspend fun doSomethingUsefulOne(): Int {
    delay(1000L) // pretend we are doing something useful here
    return 13
}

suspend fun doSomethingUsefulTwo(): Int {
    delay(1000L) // pretend we are doing something useful here, too
    return 29
}

두 함수를 순차적의로 실행(doSomethingUsefulOne()을 먼저 실행하고 doSomethingUsefulTwo()을 실행)한 뒤 두 함수의 결과의 합계를 계산하기 위해 우리는 어떻게 해야 할까? 실제로 첫 번째 함수의 결과를 이용해 다음 함수의 호출 여부 또는 호출 방법을 결정하는 경우 이러한 작업이 수행된다.

일반 코드와 마찬가지로 코루틴의 코드는 기본적으로 순차적이다. 따라서 일반 순차 호출을 사용한다. 다음 예제에서 두 가지 suspend 함수를 모두 실행하는 데 걸리는 총 시간을 측정하여 보여준다.

val time = measureTimeMillis {
    val one = doSomethingUsefulOne()
    val two = doSomethingUsefulTwo()
    println("The answer is ${one + two}")
}
println("Completed in $time ms")

출력(예시)

The answer is 42
Completed in 2041 ms

비동기를 이용한 동시 작업

Lazily started async

비동기 함수 (Async-style function)

비동기를 사용한 구조적 동시성





참고 문헌