Programming Language/Kotlin

[Kotlin] Kotlin Coroutines에서 Launch 와 Async

Tenacity_Dev 2024. 3. 1. 00:31
728x90

오늘은 Kotlin Coroutines에서 Launch 와 Async에 대해서 알아보자.

 

launch와 async는 모두 Kotlin에서 코루틴을 시작하는 기능이다.

 

차이점은 launch는 실행하면  결과 값을 전달하지 않는 반면 , async는 반환 결과 를 얻기 위해 Java에서 future를 사용하는 것처럼 코루틴의 결과를 반환하는 함수가 Deferred<T>있는 의 인스턴스를 반환한다는 것이다.

 

Launch

val job = GlobalScope.launch(Dispatchers.Default) {
    // do something and do not return result
}

작업 상태를 가져오거나 취소하는 데 사용할 수 있는 작업 개체를 반환한다.

위의 실행 예에서 우리는 무언가를 해야 하고 결과를 반환 하지 않아야 한다.

 

Async

val deferredJob = GlobalScope.async(Dispatchers.Default) {
    // do something and return result, for example 10 as a result
    return@async 10
}
val result = deferredJob.await() // result = 10

여기서는 await().를 사용하여 결과를 얻었다.

비동기에서도 Deferred작업 개체를 사용하여 작업 상태를 가져오거나 취소할 수 있다.

 

또 다른 차이점은 예외 처리 측면이다.

 

private fun doSomethingAndThrowException() {
    throw Exception("Some Exception")
}

예외를 던지는 코드를 예시로 들어보자.

 

Launch의 예외 발생 및 처리

Launch의 경우 예외가 올 경우

GlobalScope.launch {
    doSomethingAndThrowException()
}

이 경우 예외가 발생했다는 것을 알리면서 응용프로그램이 충돌하여 진행중인 함수를 중단한다.

 

GlobalScope.launch {
    try {
        doSomethingAndThrowException()
    } catch (e: Exception) {
        // handle exception
    }
}

위와 같이 예외를 처리할 수 있다.

 

Async의 예외 발생 및 처리

Async의 경우 예외가 올 경우

GlobalScope.async {
    doSomethingAndThrowException()
}

응용 프로그램이 충돌 하지 않고, 예외는 자동으로 삭제된다.

 

GlobalScope.async {
    try {
        doSomethingAndThrowException()
    } catch (e: Exception) {
        // handle exception
    }
}

위와 같이 예외를 처리할 수 있다.

 

정리

Launch Asych
실행하고 잊어버린다. 작업을 수행하고 결과를 반환한다.
launch{}는 Job을 반환하지만 결과 값을 전달하지 않는다. async{} Deferred<T>의 인스턴스를 반환한다.
Deferred<T>는 코루틴의 결과를 반환하는 await() 기능이 있다.
실행 블록 내부에 예외가 발생하면 이를 처리하지 않은 경우 애플리케이션이 충돌한다. 비동기 블록 내부에 예외가 발생하면 결과 Deferred 내부에 저장되고 다른 곳에서는 전달되지 않으며 처리하지 않는 한 자동으로 삭제된다.

 

참고

https://amitshekhar.me/blog/launch-vs-async-in-kotlin-coroutines

 

Launch vs Async in Kotlin Coroutines

In this blog, we will learn about the Launch vs Async in Kotlin Coroutines.

amitshekhar.me

 

728x90