비동기 프로그래밍이란?
동기 프로그래망 : 하나의 작업이 완료될 때까지 대기 후 다음 작업을 실행
- 작업이 오래 걸릴 경우 전체가 지연됨
- cpu 효율이 낮음 (대기 시간 발생)
- 연속된 계산,단순 로직에 적절함
비동기 프로그래밍 : 여러 작업을 동시에 실행하고, 결과가 필요할 때만 기다림
- 빠른 응답 가능
- CPU 리소드를 최적으로 활용할 수 있음
- 네트워크 요청이나 데이터베이스 조회에 적절함
Future 란?
- Future는 java5에서 도입된 인터페이스로, 비동기 연산의 결과를 나중에 받을 수 있도록 하는 기능
Future의 주요 메소드
- get():결과를 반환(작업이 끝날 때까지 블로킹)
- isDone(): 작업 완료 여부 확인
- cancel(true/false):작업 취소
Future의 한계 (CompletableFuture 가 생긴 이유)
- Future는 몇 가지 한계점이 있어서 java8에서 CompletableFuture 가 도입됨.
- get()메소드가 블로킹
- 비동기 작업의 결과를 가져오기 위해 get()을 호출하면, 작업이 끝날 때까지 기다려야함
- Future는 콜백(callback) 체이닝을 지원하지 않음
- Future는 thenApply()와 같은 체이닝 기능이 없음
- 작업 완료 후 다른 작업을 연결하려면 복잡한 코드가 필요함
- 여러 개의 Future를 조합하기 어려움
- Future는 병렬 실행된 여러 개의 작업을 조합하는 기능이 부족함
CompletableFuture 란?
- Java8에서 도입된 Future의 확장 버전으로, 비동기 작업을 더 쉽게 다룰 수 있도록 개선된 클래스
- 콜백 기반으로 체이닝 기능
- 비동기 실행이 완료되면 자동으로 결과 반환
- 불로킹 없이 작업 완료 후 추가 연산 가능
CompletableFuture 주요 메소드
- Future는 단순한 비동기 실행만 가능하지만, CompletableFuture는 체이닝 및 예외 처리까지 가능
- supplyAsync : 새로운 비동기 작업 실행 후 결과 반환
- thenApply: 이전 결과를 반환
- thenAccept : 이전 결과를 사용하지만 반환값 없음
- thenCombine : 두 개의 CompletableFuture 를 조합
- exceptionally: 예외 발생 시 대체값 반환