Java/기본
[Java] CompletableFuture
댕주
2024. 11. 8. 20:17
CompletableFuture 는 Java 8 에서 도입된 클래스로, Future 의 한계를 보완하여 비동기 작업을 더 유연하게 관리할 수 있는 도구다.
Future 는 비동기 작업 결과를 기다릴 수 있지만, 작업 완료 시 알림을 받거나 작업을 체인으로 연결하는 기능이 제한적이다.
CompletableFuture 는 이러한 기능을 지원하며, 복잡한 비동기 로직을 간결하게 구현할 수 있다.
CompletableFuture 의 주요 기능
- 비동기 작업 체인:
thenApply(), thenAccept(), thenRun() 등을 통해 비동기 작업이 완료되면 후속 작업을 수행할 수 있다. 이 덕분에 여러 작업을 체인으로 연결하는 비동기 흐름을 구현할 수 있다. - 예외 처리:
exceptionally() 메서드를 사용해 비동기 작업 중 발생한 예외를 처리할 수 있다. 비동기 작업의 에러를 후속 작업으로 연결하여 처리할 수 있어, 코드가 깔끔해진다. - 병렬 실행 및 결합:
thenCombine(), thenCompose() 같은 메서드를 통해 여러 비동기 작업을 병렬로 실행하고, 결과를 결합할 수 있다.
예를 들어, 두 개의 비동기 작업을 병렬로 수행한 후, 두 결과를 하나의 값으로 결합할 수 있다. - 완료 시점에 대한 알림:
whenComplete() 나 handle() 같은 메서드를 통해 작업이 완료되면 특정 동작을 수행할 수 있어, 작업 완료 후 자동으로 후속 처리를 이어갈 수 있다.
CompletableFuture 사용 예제
- supplyAsync() : CompletableFuture.supplyAsync() 는 비동기 작업을 실행하고 결과를 반환하는 CompletableFuture 를 생성한다
- thenComplete() : 두 개의 비동기 작업 future1 과 future2 를 병렬로 수행하고, 두 결과를 하나로 결합한다.
- thenAccept() : 최종 결합된 결과를 출력한다
CompletableFuture 의 실무 활용
- 비동기 API 호출 : 여러 외부 API를 병렬로 호출한 후 그 결과를 결합할 때 유용하다
- 데이터 처리 파이프라인 : 데이터 가공, 필터링, 전송 등 여러 작업을 체인으로 처리할 수 있다
- 병렬 데이터 분석 : 데이터베이스 조회, 파일 읽기 등 여러 I/O 작업을 비동기적으로 병렬 실행하여 성능을 높일 수 있다.
CompletableFuture 는 Future 보다 더 유연하고 체계적인 비동기 작업 처리를 제공한다. 비동기 작업 완료 후 작업을 연결하거나 에러를 쉽게 처리할 수 있어, 복잡한 비동기 로직을 구현하는 데 매우 유용하다.