Java/기본

[Java] CompletableFuture

댕주 2024. 11. 8. 20:17

CompletableFuture 는 Java 8 에서 도입된 클래스로, Future 의 한계를 보완하여 비동기 작업을 더 유연하게 관리할 수 있는 도구다.

Future 는 비동기 작업 결과를 기다릴 수 있지만, 작업 완료 시 알림을 받거나 작업을 체인으로 연결하는 기능이 제한적이다.

CompletableFuture 는 이러한 기능을 지원하며, 복잡한 비동기 로직을 간결하게 구현할 수 있다.

 

CompletableFuture 의 주요 기능

  1. 비동기 작업 체인:
    thenApply(), thenAccept(), thenRun() 등을 통해 비동기 작업이 완료되면 후속 작업을 수행할 수 있다. 이 덕분에 여러 작업을 체인으로 연결하는 비동기 흐름을 구현할 수 있다.
  2. 예외 처리:
    exceptionally() 메서드를 사용해 비동기 작업 중 발생한 예외를 처리할 수 있다. 비동기 작업의 에러를 후속 작업으로 연결하여 처리할 수 있어, 코드가 깔끔해진다.
  3. 병렬 실행 및 결합:
    thenCombine(), thenCompose() 같은 메서드를 통해 여러 비동기 작업을 병렬로 실행하고, 결과를 결합할 수 있다.
    예를 들어, 두 개의 비동기 작업을 병렬로 수행한 후, 두 결과를 하나의 값으로 결합할 수 있다.
  4. 완료 시점에 대한 알림:
    whenComplete()handle() 같은 메서드를 통해 작업이 완료되면 특정 동작을 수행할 수 있어, 작업 완료 후 자동으로 후속 처리를 이어갈 수 있다.

CompletableFuture 사용 예제

  • supplyAsync() : CompletableFuture.supplyAsync()비동기 작업을 실행하고 결과를 반환하는 CompletableFuture 를 생성한다
  • thenComplete() : 두 개의 비동기 작업 future1 과 future2 를 병렬로 수행하고, 두 결과를 하나로 결합한다.
  • thenAccept() : 최종 결합된 결과를 출력한다

CompletableFuture 의 실무 활용

  • 비동기 API 호출 : 여러 외부 API를 병렬로 호출한 후 그 결과를 결합할 때 유용하다
  • 데이터 처리 파이프라인 : 데이터 가공, 필터링, 전송 등 여러 작업을 체인으로 처리할 수 있다
  • 병렬 데이터 분석 : 데이터베이스 조회, 파일 읽기 등 여러 I/O 작업을 비동기적으로 병렬 실행하여 성능을 높일 수 있다.

CompletableFutureFuture 보다 더 유연하고 체계적인 비동기 작업 처리를 제공한다. 비동기 작업 완료 후 작업을 연결하거나 에러를 쉽게 처리할 수 있어, 복잡한 비동기 로직을 구현하는 데 매우 유용하다.