[Android] 코루틴 Under the hood 이번시간에는 코루틴이 내부적으로 어떻게 동작하는지 확인해보겠습니다 [Continuation Passing Style] CPS == Callbacks //Kotlin suspend fun createPost(token : Token, item : Item) : Post { _ } // Java/JVM Object createPost(Token token, Item item, Continuation cont) { _ } 작성한 코루틴이 컴파일 될때 내부적으로 JVM에서 Byte 코드로 변환되면서 Continuation이 하나가 더 생기게 됩니다. (CPS) [Labels] //Kotlin suspend fun postItem(item : Item) { // LABLE 0 val token = requestT..
[Android] 코루틴 Coroutine Context and Dispatchers 이번에는 coroutine context와 dispatchers 에 대해 알아보겠습니다 [Dispatchers and threads] Coroutine 은 CoroutineContext 에 의해 실행됩니다 CoroutineContext 의 요소에 여러 요소를 설정할수 있는데 요소들 중에는 Job, Dispatchers 등이 있습니다 Dispatchers 는 Coroutine이 어떤 thread 나 thread pool 에서 실행될지를 결정하는 요소입니다 모든 Coroutine builder 는 옵셔널로 CoroutineContext 를 파라미터로 받습니다. ex) launch, async 이것을 통해 dispatcher를 지정할 수 있습니다 fun main() = runBlocking { launch {..
[Android] 코루틴 Composing Suspending Functions 1. 코루틴 왜 써야하는가 2. 코루틴 기초 3. 코루틴 Cancellation and Timeouts 이번에는 suspending functions을 조합하여 코루틴을 유용하게 사용 하는 법에 대해 알아보겠습니다. [Sequential by default] fun main() = runBlocking { val time = measureTimeMillis { val one = doSomethingUsefulOne() val two = doSomethingUsefulTwo() println("The answer is ${one + two}") } println("Completed in $time ms") } suspend fun doSomethingUsefulOne(): Int { delay(1000L)..
[Android] 코루틴 Cancellation and Timeouts 1. 코루틴 왜 써야 하는가 2. 코루틴 기초 에 이어서 이번에는 코루틴의 취소와 타임아웃에 대해 알아보겠습니다 코루틴을 정교하게 취소하지 않으면 메모리를 잡아먹기 때문에 메모리릭이 발생합니다. 코루틴을 취소하는 방법은 cancel를 호출하면 간단하게 처리됩니다. 그러나 코루틴 자체가 스스로 cancel에 대해서 협조직은 형태로 구현이 되어있어야 합니다. 그러한 특성들에 대해서 알아보겠습니다 [Cancelling coroutine execution] fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // 1.3초 지연 pr..
[Android] 코루틴 기초 저번 코루틴은 왜 써야하는가 에 이어서 이번에는 코루틴의 기초에 대해 공부해 보겠습니다! [ First Coroutine ] fun main() { GlobalScope.launch { // 백그라운드에서 코루틴을 생성하고 진행합니다 delay(1000L) // 1초 동안 지연 println("World!") // 지연 후 출력 } println("Hello,") // 코루틴이 지연되는 동안 메인쓰레드는 계속 됩니다 Thread.sleep(2000L) // JVM을 유지하기 위해 2초동안 메인 스레드를 차단합니다 } 코루틴 문서에서는 이것을 쓰레드로 시도해 볼것을 권유했습니다. fun Main() { thread { //delay(1000L) Thread.sleep(2000L) println("world..
[Android] 코루틴 왜 써야하는가 코루틴은 구글 블로그에서도 공식으로 추천하고 있는 코틀린의 기능입니다. 블로그에 의하면 코루틴은 실시간 처리를 훨씬 쉽게 작성하고 이해할 수 있게 해준다고 합니다. 또한 Jetpack 라이브러리 (Lifecycle ,WorkManager, Room) 에도 코루틴을 지원하여 더 나은 코드를 작성할 수 있다고 합니다. [Coroutine] - 코루틴은 루틴의 일종 - 협동 루틴이라 할 수 있다 - 코루틴의 "Co"는 with 또는 together을 뜻한다 1 .코루틴은 이전에 자신의 실행이 마지막으로 중단되었던 지점 다음의 장소에서 실행을 재개한다. - 일반적으로 사용하는 함수나 루틴은 중단되는 개념이 없고 실행이되면 빠져나오고 끝인 반면에 코루틴은 실행이 되고나서 중단과 재개를 컨트롤 할수 있다 (함수의 ..