Kotlin에서 launch와 async는 무엇이 다를까?

2025. 2. 3. 21:14프로그래밍 언어/Kotlin 기초

728x90
반응형

🌟 들어가기 전

오늘은 launch와 async의 차이점에 대해 학습했다.

 

두 개 모두 코루틴을 실행할 때 사용되지만, launch는 결과를 반환하지 않고 단순 실행하는 반면,

async는 값을 반환할 수 있다는 차이가 있다.

 

그동안 개발을 해오면서 두개의 차이를 정확하게 모르고 사용했다.

그냥 예제 긁어서 복붙…. ㅠㅠ

 

그래서 파헤쳐본 launch와 async는 무엇이 다를까?

 

🔍 세부 내용

1. launch vs async 차이점

  • launch → 결과를 반환하지 않고, 단순히 새로운 코루틴을 실행
  • async → 결과를 반환하는 Deferred 객체를 생성해서 await()로 값을 받을 수 있음

2. 예제 코드

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job = launch {
        delay(1000)
        println("launch: 완료!")
    }

    val result = async {
        delay(1000)
        "async: 완료!"
    }

    job.join()  // launch는 join()으로 기다려야 함
    println(result.await())  // async는 await()으로 값 반환
}

출력:

launch: 완료!
async: 완료!

3. 결론

  • launch는 fire-and-forget 방식
  • async는 await()을 호출해야 결과를 받을 수 있음

* fire-and-forget 방식이란,

결과를 신경 쓰지 않고 작업을 실행만 하는 방식

 

launch는 단순히 실행 후 종료되지만, async는 await()을 호출해야 값이 반환됨.

  launch async
반환값 없음 (Job 반환) Deferred<T> 반환 (값을 반환하려면 await() 필요)
사용 목적 단순 실행 (Fire-and-Forget) 결과를 받아야 할 때
예제 launch { ... } async { ... }.await()

🤔 배운 점 & 느낀 점

launch는 단순히 코루틴을 실행하고, async는 결과값을 반환하는 용도로 사용해야 한다는 점을 다시 확인했다.

async를 사용할 때 await()을 반드시 호출해야 값을 얻을 수 있다는 점이 중요했다.

앞으로 네트워크 요청 같은 비동기 작업에서 async를 적절히 활용할 계획!

728x90
반응형