Android Jetpack

Simple Coroutine - 2 (Simple Example)

개복치 개발자 2022. 2. 13. 04:30

개복치개발자 강의는 아래의 링크에서 확인할 수 있습니다.

 

개복치개발자 | Linktree

uyalae@naver.com

linktr.ee

 

 간단하게 코루틴의 예제들을 보고 가겠습니다. 구글 공식문서에서 설명은 아래와 같이 나와 있습니다.

 

코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다.

 

 여기에서 포인트는 "비동기"인데, 아마 처음들어보신 분들도 있을 수 있으니 간단하게 설명을 드리면 

  

 커피숍이 있다고 생각해볼게요.

 

 여기에서

 

 A라는 고객이 커피를 주문하고 나오기까지 기다리고 커피를 받고

 B라는 고객이 커피를 주문하고 나오기까지 기다리고 커피를 받고

 C라는 고객이 커피를 주문하고 나오기까지 기다리고 커피를 받고

 

 의 과정을 반복하는데, 이 과정이 굉장히 비합리적이라고 생각할 수 있습니다. 

 

 

 A/B/C 모두가 커피가 나올 때 까지 카운터에서 계속 기다리는 과정을 겪어야 하기 때문이죠. 이 시간동안 핸드폰도 보고, 유튜브도 보면 효율적이지 않을까요?

 

 그래서 이런식으로 하면 어떨까 생각을 했습니다.

 

 A, B,C 고객이 주문할 동안 자리에 가서 유튜브도 하고 친구랑 이야기도 하는 형태죠.

 

 아래와 같이, 커피가 완성되는 동안 다른 것을 할 수 있는 것이 비동기 작업입니다. 컴퓨터에서 오래걸리는 작업을 할 동안 다른 일들을 하게 만들어주는 것입니다.

 

 그럼 간단하게 코루틴 예제를 한번 볼까요?

 

 아래와 같이 gradle을 넣어줬습니다.

 

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2")

 

 아래와 같이 실행하면 동기식으로 실행하면 World Hello가 나와야 할 것 같은데 비동기식으로 나타나면 Hello World가 나옵니다.

 

fun main() = runBlocking {

    launch {
        delay(1000L)
        println("World!")
    }
    println("Hello")
    
}

  

 또한, 코루틴을 보면 나타나는게 suspend 라는 애가 나옵니다.

 

 말 그대로 대기? 유예라는 의미인데, 아래와 같이 코딩을 하면, 비동기식으로 진행되어야 하는데, 이게 순차적으로 진행이 됩니다.

 

fun main() = runBlocking {
    doWorld()
    println("Hello")
}

suspend fun doWorld() {
    delay(1000L)
    println("World!")
}

World!
Hello

 

 이 부분을 비동기식으로 변경하는 것도 가능합니다.

 

fun main() = runBlocking {
    launch {
        doWorld()
    }
    println("Hello")
}

suspend fun doWorld() {
    delay(1000L)
    println("World!")
}

 

Hello
World!

 

 자, 여기까지 대해 코루틴에 아주아주 간단하게 알아봤고, 이 것들을 이용해서 LifeCycle과 연관된 예제를 한번 해보도록 하겠습니다.

 

 

 - 참조

 

https://kotlinlang.org/docs/coroutines-basics.html#your-first-coroutine

 

Coroutines basics | Kotlin

 

kotlinlang.org