KotlinConf 2018 - Exploring Coroutines in Kotlin by Venkat Subramaniam

CmplxN·2021년 1월 11일
0


유튜브 영상

Coroutines의 장점

  • Asynchronous code를 Syncrhonous code 처럼 작성할 수 있다. 그렇기 때문에 이해가 직관적이고, 스타일을 변경하는 것도 매우 쉽다.
  • 특히 Kotlin Corountines는 눈에는 잘 띄면서 적은 diff로 Async <-> Sync 할수 있다.
  • Functional code는 예외처리가 힘들다. FP와 예외처리(I/O 등 포함)은 mutually exclusive다.

Continuation

  • Kotlin Coroutines는 Continuation을 이용해 구현되어있다.
  • Continuation에는 돌아왔을 때 실행할 코드의 정보가 wrapped-up 되어있다고 이해하면 편할 것이다.
  • 개발자가 suspend function을 만들면, 컴파일러가 Continuation이 들어있는 코드를 만들어준다.
suspend fun getStockPrice(ticker: String): String {
    return Java.net.URL("http...").readText()
}

즉 바이트코드를 보면 아래와 꼴의 함수로 생성된다. (물론 코틀린 코드로 생성되는건 아니다)

fun getStockPrice(ticker: String, cont: Continuation): Any

Async

마지막으로 영상에서 제시한 Async 처리하는 코드를 보고 가자.

suspend fun measureTime(block: suspend () -> Unit) {
    val start = System.nanoTime()
    block()
    val end = System.nanoTime()
    println("${(end - start) / 1.0e9} seconds")
}

suspend fun work(num: Int): Int {
    delay(1000L)
    return num + 1
}

val list = mutableListOf(3, 7, 13)

fun main(): Unit = runBlocking {
    launch {
        measureTime {
            val results = mutableListOf<Deferred<Int>>()
            for (elm in list)
                results += async { work(elm) }
            for (result in results)
                println(result.await())
        }
    }
}

코루틴에 대해 모르는 입장에서 소개 받는다는 느낌으로 정확히 이해되지 않는 것은 일단 받아들이는 식으로 맘편하게 영상을 봤다.
몇가지 발표 영상을 더 보고 공식문서 등으로 정확히 살펴봐야겠다.

profile
Android Developer

0개의 댓글