등장 배경
기존 이그제큐터 프레임워크와 포크/조인 풀을 사용해서 성능 개선은 얻을 수 있었지만,
복잡한 비동기 작업 흐름을 조합하는 일은 여전히 까다로움
→ CompletableFuture 자바 8에 등장
기본 개념과 생성
runAsync vs supplyAsync : 반환값이 없는 경우와 있는 경우의 차이
- 비동기의 주체: 두 번째 파라미터로 Executor를 넘기지 않았을 때 기본적으로 사용하는 ForkJoinPool.commonPool()
작업 체이닝 및 조합
작업 잇기:
- thenApply: 결과를 반환
- thenAccept: 결과를 소비
- thenCompose: 비동기 연산의 결과를 다음 비동기 연산과 연결
작업 조합:
- thenCombine: 두 작업을 독립적으로 실행하고 두 결과가 모두 나오면 병합
- allOf / anyOf: 여러 개의 작업을 동시에 실행하고 모두 끝날 때까지 기다리거나, 하나라도 끝날 때 까지 기다리기
예외 처리
예외가 발생해도 바로 호출 스레드로 전달되지 않음
- exceptionally: 예외 발생 시 기본값 등을 반환하여 흐름을 요구
- handle: 성공 결과와 예외를 동시에 인자로 받아 두 경우를 모두 처리
- whenComplete: 결과와 관계없이 실행되지만, 결과 값을 바꿀 수는 없음