[java] 자바 함수형 인터페이스와 CompletableFuture를 함께 사용하는 예시는 어떤 것이 있나요?
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;

public class CompletableFutureExample {

    public static void main(String[] args) {

        // CompletableFuture로 비동기 작업 생성
        CompletableFuture<String> future = CompletableFuture.supplyAsync(new Supplier<String>() {
            @Override
            public String get() {
                return performLongRunningTask();
            }
        });

        // CompletableFuture가 완료되었을 때 실행할 작업 정의
        CompletableFuture<Void> finalFuture = future.thenAccept(result -> {
            System.out.println("비동기 작업 결과: " + result);
        });

        // CompletableFuture가 완료될 때까지 대기
        finalFuture.join();
    }

    private static String performLongRunningTask() {
        // 오랜 시간이 걸리는 작업 시뮬레이션
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "작업 완료";
    }
}

위의 예시는 CompletableFuture를 사용하여 비동기 작업을 실행하는 방법을 보여줍니다. supplyAsync 메소드를 사용하여 비동기 작업을 생성하고, thenAccept 메소드를 사용하여 작업이 완료되면 결과를 처리하는 작업을 정의합니다.

performLongRunningTask 메소드는 시간이 오래 걸리는 작업을 시뮬레이션하기 위해 5초간 대기하는 동안 “작업 완료”를 반환합니다.

이 코드를 실행하면 performLongRunningTask 메소드의 작업이 비동기로 실행되고, 작업이 완료되면 결과가 출력됩니다. finalFuture.join() 메소드는 CompletableFuture가 완료될 때까지 대기하므로, 작업이 완료되기까지 메인 스레드가 종료되지 않습니다.

자바의 CompletableFuture는 비동기 작업을 쉽게 관리하고 핸들링할 수 있는 강력한 도구입니다. 함수형 프로그래밍 스타일의 함수형 인터페이스와 함께 사용하면 복잡한 비동기 작업을 보다 쉽게 처리할 수 있습니다.

참고 자료:

이 코드는 자바 8부터 지원되는 CompletableFuture를 사용하고 있으므로, 자바 8 이상의 버전에서 실행해야 합니다.