Coroutine - Suspend

2024. 11. 20. 13:36Kotlin

suspend 함수는 Kotlin 코루틴에서 비동기 작업을 수행하기 위해 사용되는 함수야. suspend 키워드는 함수가 일시 중단(suspend)될 수 있으며, 나중에 다시 재개(resume)될 수 있음을 나타내. suspend 함수는 코루틴 내에서만 호출될 수 있어. 비동기 작업을 더 쉽게 작성하고 관리할 수 있도록 도와주지.

suspend 함수를 사용해야 할까?

suspend 함수를 사용하면 다음과 같은 장점이 있어:

  1. 비동기 작업을 동기 코드처럼 작성할 수 있어:

    • suspend 함수를 사용하면 비동기 작업을 마치 동기 작업처럼 순차적으로 작성할 수 있어. 이는 코드의 가독성과 유지보수성을 높여줘.
  2. 코루틴 내에서 일시 중단과 재개를 쉽게 처리할 수 있어:

    • suspend 함수는 코루틴이 일시 중단될 수 있는 지점을 명확하게 정의해줘. 이를 통해 코루틴이 비동기 작업을 수행하는 동안 다른 작업을 처리할 수 있어.
  3. 비동기 흐름 제어가 쉬워:

    • suspend 함수는 다른 suspend 함수와 결합하여 복잡한 비동기 흐름을 쉽게 제어할 수 있어. 예를 들어, 여러 비동기 작업을 순차적으로 실행하거나 병렬로 실행할 수 있어.

suspend 함수의 예제

다음은 suspend 함수를 사용하는 예제야:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    delay(1000L) // 1초 동안 일시 중단
    return "데이터 가져오기 완료"
}

fun main() = runBlocking {
    println("비동기 작업 시작")
    val result = fetchData() // suspend 함수 호출
    println(result) // "데이터 가져오기 완료" 출력
    println("비동기 작업 종료")
}

설명

  • fetchData 함수는 suspend 키워드로 정의되어 있어. 이 함수는 1초 동안 일시 중단된 후 문자열을 반환해.
  • runBlocking 블록 내에서 fetchData 함수를 호출해. runBlocking은 현재 스레드를 블록하면서 코루틴을 실행하는 함수야.
  • fetchData 함수가 호출되면 1초 동안 일시 중단되고, 이후 "데이터 가져오기 완료"를 반환해.
  • 반환된 결과를 출력하면 "비동기 작업 종료"가 출력돼.

suspend 함수의 특성

  1. 코루틴 내에서만 호출 가능:

    • suspend 함수는 코루틴 내에서만 호출할 수 있어. runBlocking, launch, async 등 코루틴 빌더 내에서 호출해야 해.
  2. 일시 중단과 재개:

    • suspend 함수는 delay, withContext, await 등 다른 suspend 함수와 함께 사용되어 코루틴을 일시 중단하고 나중에 재개할 수 있어.
  3. 비동기 작업의 효율적 관리:

    • suspend 함수를 사용하면 비동기 작업을 효율적으로 관리할 수 있어. 예를 들어, 네트워크 요청, 파일 I/O, 데이터베이스 쿼리 등을 suspend 함수로 구현할 수 있어.

결론

suspend 함수는 Kotlin 코루틴에서 비동기 작업을 쉽게 작성하고 관리할 수 있도록 도와주는 중요한 기능이야. 비동기 작업을 동기 코드처럼 작성할 수 있게 해주고, 코루틴 내에서 일시 중단과 재개를 쉽게 처리할 수 있어. suspend 함수를 사용하면 비동기 흐름 제어가 더 쉬워지고, 코드의 가독성과 유지보수성이 높아져.

'Kotlin' 카테고리의 다른 글

Dispatchers  (0) 2024.11.27
Continuation  (0) 2024.11.27
Coroutine VS Thread  (0) 2024.11.20
Coroutine - Global Scope  / runBlocking  (0) 2024.11.20
코틀린의 List와 Array  (0) 2024.01.26