[kotlin] 비동기 작업 처리를 위한 Future와 Promise 활용
안녕하세요! 이번 글에서는 Kotlin에서 비동기 작업을 처리하는 데 도움이 되는 Future와 Promise에 대해 알아보겠습니다.
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 활용에 대해 알아보았습니다. 감사합니다!
참고 자료:
- Kotlin 공식 문서: https://kotlinlang.org/docs/future-promise.html
- Baeldung: https://www.baeldung.com/java-completablefuture