[kotlin] 비동기 작업 처리를 위한 Future와 Promise 활용

안녕하세요! 이번 글에서는 Kotlin에서 비동기 작업을 처리하는 데 도움이 되는 FuturePromise에 대해 알아보겠습니다.

1. Future란 무엇인가?

Future는 비동기 작업의 결과를 나타내는 인터페이스입니다. 작업이 완료되면 결과를 얻을 수 있고, 작업이 진행 중이면 기다릴 수 있습니다. 다음은 간단한 Future 사용 예시입니다.

import kotlinx.coroutines.*
import java.util.concurrent.*

fun main() {
    val future: CompletableFuture<String> = CompletableFuture.supplyAsync {
        delay(1000)
        "Future와 Promise"
    }

    future.thenAccept { result ->
        println("결과: $result")
    }

    println("메인 스레드는 계속 실행됨")
    Thread.sleep(2000)
}

2. Promise란 어떤 것인가?

Promise는 Future와 비슷하지만, 결과를 직접 설정할 수 있는 객체입니다. Promise는 주로 Future를 완성하거나 작업 실패를 나타냅니다. 아래에 Promise 사용 예시가 있습니다.

import kotlinx.coroutines.*

fun main() {
    val promise = CompletableDeferred<Int>()

    GlobalScope.launch {
        delay(1000)
        promise.complete(42)
    }

    val future = promise.await()
    println("Future 결과: $future")
}

3. Future와 Promise 조합하기

Future와 Promise를 조합하여 비동기 작업을 효과적으로 처리할 수 있습니다. 아래는 이 두 개념을 조합한 예시입니다.

import kotlinx.coroutines.*
import java.util.concurrent.*

fun main() {
    val promise = CompletableDeferred<Int>()

    GlobalScope.launch {
        val future: CompletableFuture<Int> = CompletableFuture.supplyAsync {
            delay(1000)
            42
        }

        promise.complete(future.await())
    }

    GlobalScope.launch {
        val result = promise.await()
        println("결과: $result")
    }

    runBlocking {
        delay(2000)
    }
}

요약

Kotlin에서는 Future와 Promise를 활용하여 비동기 작업을 쉽게 처리할 수 있습니다. Future는 작업의 결과를 다루는 인터페이스이고, Promise는 Future를 완성하거나 실패를 나타내는 객체입니다. 두 개념을 적절히 조합하여 효율적으로 비동기 작업을 다룰 수 있습니다.

이상으로 비동기 작업 처리를 위한 Future와 Promise 활용에 대해 알아보았습니다. 감사합니다!

참고 자료: