Kotlin/포스팅

코틀린 코루틴

짜집퍼박사(짜박) 2023. 12. 5. 23:22

코틀린 코루틴은 비동기 프로그래밍 및 동시성을 지원하기 위한 경량 스레드를 제공하는 라이브러리입니다. 코루틴은 코드의 비동기적인 실행을 도와주는데, 기존의 콜백 기반 비동기 코드보다 가독성이 높고 효율적인 방법을 제공합니다.

 

1. 코루틴 기본 구성 요소

- suspend 함수: 코루틴은 suspend 키워드를 사용하여 정의된 함수 내에서 실행됩니다. suspend 함수는 일시 중단 가능하며, 코루틴이 일시 중단되면 호출 스택이 유지되어 나중에 다시 시작될 수 있습니다.

suspend fun doSomething(): Int {
    // 비동기적인 작업 수행
    return 42
}

- Coroutine Builder: 코루틴을 시작하기 위한 빌더 함수가 여러 개 있습니다. launch, async, runBlocking 등이 있으며, 각각의 역할과 사용법이 다릅니다.

 

2. Coroutine Scope

CoroutineScope 인터페이스: 코루틴은 CoroutineScope 인터페이스에서 파생됩니다. CoroutineScope는 특정 스코프에서 코루틴을 실행하고 관리하는 역할을 합니다.

// 예시: CoroutineScope를 사용하여 launch 코루틴 빌더 실행
val myScope = CoroutineScope(Dispatchers.Default)
myScope.launch {
    // 비동기 코드 작성
}

 

3. Coroutine Dispatcher

- Dispatcher: 코루틴이 어느 스레드에서 실행될지를 결정하는데 사용됩니다. 주요 디스패처에는 Dispatchers.Main, Dispatchers.IO, Dispatchers.Default 등이 있습니다.

// 예시: IO 디스패처를 사용하여 비동기 작업 수행
val result = withContext(Dispatchers.IO) {
    // IO 작업 수행
    "Result"
}

 

4. Coroutine Job과 Cancellation

- Job: 코루틴은 실행 중인 작업을 나타내는 Job 객체를 반환합니다. 이를 사용하여 코루틴을 취소하거나 조작할 수 있습니다.

val job = GlobalScope.launch {
    // 비동기 코드
}

// 나중에 코루틴 취소
job.cancel()

 

5. Coroutine 예외 처리

코루틴은 예외를 처리하기 위한 try, catch 블록을 제공합니다.

val result = try {
    // 비동기 작업
    "Success"
} catch (e: Exception) {
    "Error"
}

 

6. Coroutine Deferred와 Async

Deferred와 async를 사용하여 비동기적인 계산을 시작하고 결과를 얻을 수 있습니다.

val deferredResult: Deferred<String> = async {
    // 비동기 계산
    "Result"
}

// 결과를 얻기 위해 await 사용
val result = deferredResult.await()

이는 코틀린 코루틴의 간략한 소개일 뿐이며, 더 복잡한 상황에서는 더 많은 기능과 개념이 존재합니다. Coroutine Flow, Channel, Android에서의 활용 등 다양한 부분에서 코루틴을 사용할 수 있습니다. 코틀린 공식 문서와 튜토리얼을 참고하면 더 많은 정보를 얻을 수 있습니다.

 

With ChatGPT

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

코틀린 웹 개발  (0) 2023.12.07
코틀린 안드로이드 개발  (0) 2023.12.06
코틀린 다중 플랫폼  (0) 2023.12.05
코틀린 상호 운용성  (0) 2023.10.06
코틀린 표현력  (0) 2023.09.24