반응형
Java 8에서 CompletableFuture를 활용한 비동기 프로그래밍
비동기 프로그래밍은 오늘날의 모던 애플리케이션에서 필수적인 개념입니다. Java 8에서 소개된 CompletableFuture는 이러한 비동기 프로그래밍을 처리하는 데 도움이 되는 강력한 도구입니다. 이 글에서는 CompletableFuture를 사용하여 비동기 작업을 수행하는 방법을 알아보겠습니다.
CompletableFuture 이해하기
CompletableFuture는 Java의 Future 인터페이스를 구현하며, 동시성 작업의 결과를 나타냅니다. 비동기 작업을 수행한 후에 결과를 얻거나, 작업이 완료되기를 기다릴 수 있습니다. 이는 다양한 작업을 병렬로 실행할 수 있으며, 애플리케이션의 성능을 향상시킬 수 있습니다.
CompletableFuture 사용법
- 비동기 작업 시작: CompletableFuture를 사용하여 새로운 비동기 작업을 시작하려면 supplyAsync() 메소드를 사용합니다. 이 메소드는 Supplier 함수형 인터페이스를 매개변수로 받아들이며, 반환 값으로 CompletableFuture를 제공합니다.
CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
// 비동기 작업 수행
return "Hello, CompletableFuture!";
});
- 결과 가져오기: CompletableFuture의 get() 메소드를 호출하여 결과를 가져올 수 있습니다. 이 메소드는 호출 스레드가 결과가 준비될 때까지 블록됩니다.
String result = completableFuture.get();
- 결과 처리: CompletableFuture에서 제공하는 thenApply(), thenAccept(), thenRun() 등의 메소드를 사용하여 결과를 처리할 수 있습니다. 이 메소드들은 CompletableFuture의 완료 후에 실행되는 콜백 함수를 등록합니다.
CompletableFuture<String> transformedResult = completableFuture.thenApply(result -> result.toUpperCase());
- 여러 비동기 작업 합치기: CompletableFuture는 thenCompose(), thenCombine() 등의 메소드를 통해 여러 비동기 작업을 합칠 수 있습니다. 이를 통해 복잡한 비동기 작업 흐름을 구성할 수 있습니다.
CompletableFuture<String> firstTask = CompletableFuture.supplyAsync(() -> "First task");
CompletableFuture<String> secondTask = CompletableFuture.supplyAsync(() -> "Second task");
CompletableFuture<String> combinedResult = firstTask.thenCombine(secondTask, (first, second) -> first + ", " + second);
- 예외 처리: exceptionally() 메소드를 사용하여 CompletableFuture에서 발생한 예외를 처리할 수 있습니다.
CompleFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("Error occurred!");
}).exceptionally(ex -> {
// 예외 처리
return "Default value";
});
- 비동기 작업 완료 시 알림 받기: CompletableFuture의 thenAccept() 또는 whenComplete() 메소드를 사용하여 비동기 작업이 완료될 때 알림을 받을 수 있습니다. 이를 통해 다음 작업을 계획하거나, 완료된 작업에 대한 추가 처리를 수행할 수 있습니다.
CompletableFuture.supplyAsync(() -> "Async task")
.thenAccept(result -> System.out.println("Task completed: " + result))
.whenComplete((result, ex) -> {
if (ex != null) {
System.out.println("Error occurred: " + ex.getMessage());
} else {
System.out.println("Task completed successfully!");
}
});
- 비동기 작업 취소: CompletableFuture의 cancel() 메소드를 사용하여 비동기 작업을 취소할 수 있습니다. 이는 작업이 아직 시작되지 않았거나 실행 중일 때 작업을 중단하고자 할 때 유용합니다.
boolean isCancelled = completableFuture.cancel(true);
이러한 기능들을 활용하여 Java 8의 CompletableFuture를 사용하여 강력한 비동기 프로그래밍을 구현할 수 있습니다. CompletableFuture를 사용하면 작업의 동시성을 높여 성능을 향상시킬 수 있으며, 코드의 가독성도 높일 수 있습니다. 이를 통해 개발자들은 더 효율적이고 안정적인 애플리케이션을 개발할 수 있습니다.
반응형
'자기개발 > 검색한 자료 정리' 카테고리의 다른 글
Visual Studio Code(VSCode) 설치 및 GitHub Copilot, React 개발 환경 설정하기 (0) | 2023.04.24 |
---|---|
리눅스 기본 명령어 (0) | 2023.04.24 |
TypeScript와 TSLint를 이용한 코드 품질 관리 (0) | 2023.04.24 |
JavaScript의 이벤트 루프와 비동기 처리 이해하기 (0) | 2023.04.24 |
Java에서 디자인 패턴 실전 적용 사례 (0) | 2023.04.23 |