Kotlin에서 비동기 프로그래밍은 애플리케이션의 성능과 응답성을 향상시키는 데 매우 중요한 역할을 합니다. 특히, 시간이 오래 걸리는 작업을 메인 스레드와 분리하여 실행하면 사용자 인터페이스(UI)가 멈추는 현상을 방지하고 더 나은 사용자 경험을 제공할 수 있습니다.
CompletableFuture는 자바에서 비동기 작업을 처리하기 위해 도입된 클래스이며, Kotlin에서도 이 클래스를 활용하여 비동기 처리를 구현할 수 있습니다. 이번 글에서는 CompletableFuture.runAsync 메서드를 사용하여 비동기 작업을 실행하는 방법에 대해 알아보겠습니다.
CompletableFuture.runAsync는 Runnable 인터페이스를 구현한 작업을 비동기적으로 실행하는 메서드입니다. Runnable은 인자가 없고 반환 값도 없는 함수를 나타내는 인터페이스이므로, runAsync를 사용하는 작업은 결과를 반환하지 않습니다.
fun runAsync(runnable: Runnable): CompletableFuture<Void>
runAsync` 메서드는 스레드 풀에서 스레드를 가져와 작업을 실행하고, 작업이 완료되면 `CompletableFuture<Void>`를 반환합니다. `Void`는 반환 값이 없음을 나타내는 타입입니다.
### CompletableFuture.runAsync 사용 예제
다음은 `CompletableFuture.runAsync`를 사용하여 비동기적으로 `saveKeyword` 함수를 실행하는 예제입니다.
kotlin
CompletableFuture.runAsync {
saveKeyword(searchTerm)
}
위 코드에서 saveKeyword(searchTerm) 함수는 Runnable로 감싸져서 runAsync 메서드에 전달됩니다. runAsync는 이 작업을 스레드 풀의 스레드에서 비동기적으로 실행하고, 작업이 완료되면 CompletableFuture를 반환합니다.
CompletableFuture.runAsync의 장점
간편한 비동기 실행: Runnable 작업만 제공하면 간편하게 비동기적으로 실행할 수 있습니다.
스레드 관리: 스레드 풀을 사용하여 스레드를 효율적으로 관리하므로, 개발자가 직접 스레드를 생성하고 관리할 필요가 없습니다.
CompletableFuture.runAsync의 단점
결과 반환 불가: Runnable 작업은 결과를 반환할 수 없으므로, 작업 결과를 얻어야 하는 경우에는 CompletableFuture.supplyAsync 등의 다른 메서드를 사용해야 합니다.
예외 처리: 비동기 작업에서 발생한 예외는 기본적으로 메인 스레드로 전파되지 않으므로, 별도의 예외 처리 메커니즘을 구현해야 합니다.
CompletableFuture.runAsync는 결과를 반환하지 않는 작업을 비동기적으로 실행하는 데 유용한 메서드입니다. 간편하게 비동기 작업을 실행하고 스레드를 효율적으로 관리할 수 있지만, 작업 결과를 얻을 수 없고 예외 처리를 직접 구현해야 한다는 단점이 있습니다. 작업의 특성에 따라 적절한 비동기 처리 방법을 선택하는 것이 중요합니다.