Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 CompletableFuture API 주요 개선 사항 총정리

CompletableFuture API는 자바에서 비동기(Asynchronous) 프로그래밍을 구현할 때 사용되는 핵심 도구입니다. 이를 활용하면 main() 스레드와 별도의 스레드에서 작업을 실행하여 논블로킹(Non-blocking) 코드를 작성할 수 있으며, 작업의 진행 상황이나 완료·실패 여부를 main() 스레드에 통지할 수 있습니다.

Java 9에서는 CompletableFuture API에 몇 가지 중요한 개선 사항이 도입되었습니다. 크게 세 가지로 나눌 수 있습니다.

  • 타임아웃 및 지연 처리 지원
  • 서브클래싱(Subclassing) 지원 개선
  • 새로운 팩토리 메서드 추가

1. 타임아웃 및 지연 처리 지원

public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)

orTimeout() 메서드는 작업이 지정된 시간 내에 완료되지 않을 경우 프로그램을 중단하고 TimeoutException을 발생시키도록 설정합니다. 무한정 대기하는 상황을 방지할 수 있어 안정적인 비동기 처리에 유용합니다.

public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)

completeOnTimeout() 메서드는 지정된 시간 내에 작업이 완료되지 않으면 예외를 던지는 대신, 미리 제공된 기본값(default value)으로 CompletableFuture를 완료시킵니다. 타임아웃 발생 시에도 우아하게(fallback) 동작을 이어갈 수 있다는 점이 특징입니다.

2. 서브클래싱 지원 개선

public Executor defaultExecutor()

defaultExecutor() 메서드는 Executor를 별도로 지정하지 않은 비동기 메서드들이 사용하는 기본 Executor를 반환합니다. 서브클래스에서 이 메서드를 오버라이드하면 최소 하나의 독립적인 스레드를 제공하는 Executor를 직접 정의할 수 있습니다.

public <U> CompletableFuture<U> newIncompleteFuture()

newIncompleteFuture() 메서드는 CompletionStage 인터페이스의 메서드가 반환할 타입과 동일한 스펙을 가진, 아직 완료되지 않은 새로운 CompletableFuture 인스턴스를 생성합니다. 이전 버전에서 내부 구현에 의존했던 부분이 개선되어, 커스텀 서브클래스 작성이 훨씬 수월해졌습니다.

3. 새로운 팩토리 메서드

public static <U> CompletableFuture<U> completedFuture(U value)

completedFuture() 팩토리 메서드는 전달된 값으로 이미 완료된 상태의 새로운 CompletableFuture를 반환합니다. 즉시 값을 사용할 수 있는 경우 유용합니다.

public static <U> CompletionStage<U> completedStage(U value)

completedStage() 팩토리 메서드는 전달된 값으로 미리 완료된 새로운 CompletionStage를 반환합니다. 반환된 객체는 CompletionStage 인터페이스에 정의된 메서드만 사용할 수 있으며, CompletableFuture의 추가 기능에는 접근할 수 없습니다. 불변성이 보장되어야 하는 상황에서 적합합니다.

마무리

Java 9의 CompletableFuture API 개선 사항은 비동기 프로그래밍의 안정성과 확장성을 크게 높여줍니다. 특히 orTimeout()completeOnTimeout()을 활용하면 응답 지연 문제를 효과적으로 제어할 수 있고, 향상된 서브클래싱 지원 덕분에 더 유연한 커스텀 비동기 로직 설계가 가능해졌습니다. 비동기 처리 코드를 작성할 계획이라면 위 기능들을 적극적으로 활용해 보시기 바랍니다.