api 통신을 효율적으로 함으로써 화면을 부드럽게 그릴 수 있을까 하고 알아보다 자바에서 제공하는 인터페이스인 CompletableFuture라는 것을 알게 되었다. 

 

내가 마주한 api 통신의 문제는 1. 많은 데이터 양이 통신 될 때 모든 통신을 기다려야 함. 2. 기다리는 동안 화면을 스크롤 할 시 버벅거림 같은 현상이었고 이를 해결하기 위해 사용하였다. 

 

CompletableFuture 이전에는 Future 라는 게 있었지만, 

1) 블로킹 호출 : 'Future.get()' 메서드를 호출하여 사용하면 해당 호출이 완료될 때까지 스레드가 블로킹되어 api 호출을 동시에 처리할 때 문제가 되었다. 

2) 콜백 지원 부족 : Future는 완료 시 실행할 수 있는 콜백을 지원하지 않았다. 그래서 비동기작업이 완료 되었을 때 추가적인 작업을 명시적으로 처리하는 게 어려웠다. 

 

그래서 이 문제점을 해결하려고  나타난게 CompletableFuture 인 것이다.

 

CompletableFuture의 가장 좋은 점은 외부에서 명시적으로 Complete 시킬 수가 있다. 즉, 몇 초 이내에 응답이 오지 않는다면 기본값으로 미리 캐시에 넣어둔 값이나, 특정한 값을 리턴하게 할 수 있다.

 

예를 들면, 아래의 코드 처럼 

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class CompletableFutureExample {

    public static void main(String[] args) {
        // CompletableFuture 생성
        CompletableFuture<String> completableFuture = new CompletableFuture<>();

        // CompletableFuture에 값 설정
        String value = "미리 세팅 해 둔 값";
        completableFuture.complete(value);

        try {
            String result = completableFuture.get();
            System.out.println("CompletableFuture에서 가져온 값: " + result);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}

 

비동기 작업 중에 CompletableFuture  의 complete를 이용하여 명시적으로 기본값으로 지정한다.

대신, complete() 매서드를 호출하면 CompletableFuture의 상태가 즉시 완료 된다. 심지어  CompletableFuture 가 비동기 작업을 수행하는 도중이더라도 상태를 완료로 설정한다. 그러면 상태가 완료된  CompletableFuture 의 get()을 통해  미리 지정해 둔 값을 가져와 후속 작업을 진행할 수 있다. 

 

 

 

 

'JAVA' 카테고리의 다른 글

[Java] nextLine() 오류  (0) 2024.10.31
[Java] 문자열을 반복하는 메서드 - repeat()  (0) 2024.10.24
자바의 <T> 제네릭 타입 (Generic Type)  (0) 2024.05.24
MVC 모델  (0) 2023.10.27
StringBuilder 사용법과 메서드 정리  (0) 2023.09.09
해니01_15