Kotlin/포스팅

코루틴과 일시 중단 함수

짜집퍼박사(짜박) 2024. 1. 7. 13:40

코틀린의 코루틴은 비동기 프로그래밍을 편리하게 다룰 수 있도록 하는 기능 중 하나입니다. 코루틴은 코틀린 표준 라이브러리에 내장되어 있으며, kotlinx.coroutines 라이브러리를 통해 제공됩니다. 이를 통해 일시 중단 함수(suspending functions)를 사용하여 비동기적인 작업을 효과적으로 다룰 수 있습니다.

 

1. 일시 중단 함수

코루틴을 사용하면 일시 중단 함수를 작성하여 비동기 코드를 더 쉽게 작성할 수 있습니다. 일시 중단 함수는 suspend 키워드를 사용하여 선언됩니다.

import kotlinx.coroutines.delay

suspend fun mySuspendingFunction() {
    println("Start")
    delay(1000) // 1초 동안 일시 중단
    println("End")
}

 

2. 코루틴 빌더

launch, async, runBlocking 등의 코루틴 빌더를 사용하여 일시 중단 함수를 호출할 수 있습니다.

import kotlinx.coroutines.*

suspend fun mySuspendingFunction() {
    println("Start")
    delay(1000)
    println("End")
}

fun main() = runBlocking {
    launch {
        mySuspendingFunction() // launch 빌더를 통해 비동기적으로 호출
    }

    println("Main thread is not blocked.")
    delay(2000)
    println("End")
}

 

3. 취소와 예외 처리

코루틴은 CancellationException을 통해 취소되거나, 예외를 통해 오류 처리됩니다. try-catch 블록을 사용하여 예외를 처리할 수 있습니다.

import kotlinx.coroutines.*

suspend fun mySuspendingFunction() {
    println("Start")
    try {
        delay(1000)
        throw RuntimeException("An error occurred") // 예외 발생
    } catch (e: Exception) {
        println("Caught exception: ${e.message}")
    }
    println("End")
}

fun main() = runBlocking {
    launch {
        mySuspendingFunction()
    }

    println("Main thread is not blocked.")
    delay(2000)
    println("End")
}

 

4. 코루틴 컨텍스트와 디스패처

코루틴은 실행 환경인 코루틴 컨텍스트를 통해 동작합니다. 컨텍스트를 통해 어느 스레드에서 코루틴이 실행될지, 코루틴이 어떤 작업을 수행할지를 제어할 수 있습니다.

import kotlinx.coroutines.*

suspend fun mySuspendingFunction() {
    println("Running on ${Thread.currentThread().name}")
}

fun main() = runBlocking {
    launch(Dispatchers.Default) {
        mySuspendingFunction() // 백그라운드 스레드에서 실행
    }

    launch(newSingleThreadContext("MyOwnThread")) {
        mySuspendingFunction() // 새로운 스레드에서 실행
    }

    mySuspendingFunction() // 메인 스레드에서 실행
}

코루틴을 사용하면 일시 중단 함수를 통해 비동기적인 작업을 더욱 간편하게 다룰 수 있습니다. kotlinx.coroutines 라이브러리를 통해 다양한 기능을 활용할 수 있으며, 특히 코루틴의 가독성과 간결성은 비동기 프로그래밍을 보다 효과적으로 만들어 줍니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코루틴 영역  (0) 2024.01.07
코루틴 빌더  (0) 2024.01.07
코틀린 코루틴  (0) 2024.01.07
코틀린 쓰레드  (0) 2024.01.07
코틀린 동시성  (0) 2024.01.07