java - Future, CompletableFuture, 비동기 프로그래밍

잠자는 고양이·2025년 5월 23일
0

Java

목록 보기
69/73

비동기 프로그래밍이란?

동기 프로그래망 : 하나의 작업이 완료될 때까지 대기 후 다음 작업을 실행

  • 작업이 오래 걸릴 경우 전체가 지연됨
  • cpu 효율이 낮음 (대기 시간 발생)
  • 연속된 계산,단순 로직에 적절함

비동기 프로그래밍 : 여러 작업을 동시에 실행하고, 결과가 필요할 때만 기다림

  • 빠른 응답 가능
  • CPU 리소드를 최적으로 활용할 수 있음
  • 네트워크 요청이나 데이터베이스 조회에 적절함

Future 란?

  • Future는 java5에서 도입된 인터페이스로, 비동기 연산의 결과를 나중에 받을 수 있도록 하는 기능

Future의 주요 메소드

  • get():결과를 반환(작업이 끝날 때까지 블로킹)
  • isDone(): 작업 완료 여부 확인
  • cancel(true/false):작업 취소

Future의 한계 (CompletableFuture 가 생긴 이유)

  • Future는 몇 가지 한계점이 있어서 java8에서 CompletableFuture 가 도입됨.
  1. get()메소드가 블로킹
  • 비동기 작업의 결과를 가져오기 위해 get()을 호출하면, 작업이 끝날 때까지 기다려야함
  1. Future는 콜백(callback) 체이닝을 지원하지 않음
  • Future는 thenApply()와 같은 체이닝 기능이 없음
  • 작업 완료 후 다른 작업을 연결하려면 복잡한 코드가 필요함
  1. 여러 개의 Future를 조합하기 어려움
  • Future는 병렬 실행된 여러 개의 작업을 조합하는 기능이 부족함

CompletableFuture 란?

  • Java8에서 도입된 Future의 확장 버전으로, 비동기 작업을 더 쉽게 다룰 수 있도록 개선된 클래스
    • 콜백 기반으로 체이닝 기능
    • 비동기 실행이 완료되면 자동으로 결과 반환
    • 불로킹 없이 작업 완료 후 추가 연산 가능

CompletableFuture 주요 메소드

  • Future는 단순한 비동기 실행만 가능하지만, CompletableFuture는 체이닝 및 예외 처리까지 가능
  • supplyAsync : 새로운 비동기 작업 실행 후 결과 반환
  • thenApply: 이전 결과를 반환
  • thenAccept : 이전 결과를 사용하지만 반환값 없음
  • thenCombine : 두 개의 CompletableFuture 를 조합
  • exceptionally: 예외 발생 시 대체값 반환
profile
개발자가 되고 싶은 잠자는고양이

0개의 댓글