be programmer
[Flutter/Dart] Flutter Future란 무엇인가?, Java Future, Completable와의 비교 본문
[Flutter/Dart] Flutter Future란 무엇인가?, Java Future, Completable와의 비교
mm______m 2024. 11. 13. 11:54Flutter의 Future는 Java의 CompletableFuture에 대응된다.
Future: Flutter에서 Future는 비동기 연산의 결과를 나타낸다. async와 await 키워드를 사용하여 비동기 작업을 처리할 수 있다. 이와 유사하게 Spring에서도 CompletableFuture를 통해 비동기 연산 결과를 나중에 사용할 수 있고, thenApply, thenCompose 등의 메서드로 작업을 연결하거나 후속 처리를 진행할 수 있다.
다른 방식으로,DeferredResult이 있다. Spring MVC에서 비동기 처리를 위해 사용할 수 있는 또 다른 방식으로, 컨트롤러가 비동기 작업의 결과를 DeferredResult 객체에 설정해 비동기 응답을 처리한다. Future와는 다르지만, Flutter의 FutureBuilder처럼 비동기 작업의 결과를 기다리는 방식에 적합한 기능이다.
자바5에도 Future라는 메서드가 있었지만, 이는 다음과 같은 한계가 있었다.
먼저, 외부에서 작업을 완료할 수 없고, get()의 타임 아웃 설정으로 완료 가능하다. get()과 같은 블로킹 코드로 이후의 결과를 처리할 수 있으며, 여러 Future를 조합할 수 없다. 여러 작업을 조합하거나 예외 처리할 수 없는 단점이 있어 자바 8에 이르러CompletableFuture가 나오게 되었다.
기존 Future을 기반으로 하고, CompletationStage를 갖고 있어 작업을 중첩시키거나 완료후 콜백이 가능하고, 외부에서 작업을 완료할 수 있는 기능이 갖춰진 CompletableFuture는 Flutter의 Future와 유사하다.
공통적으로는 미래에 처리될 작업들을 비동기적(어떤 작업이 완료되지 않아도 다른 작업을 수행하고 완료 가능)으로 처리할 수 있는 기능이라는 것이다.
Flutter Futute의 사용 예시는 다음과 같다. 코드를 보자.
//4초 뒤에 A를 출력하는 코드
Future<String> drawAlphabet() {
return Future.delayed(Duration(seconds: 4), () => "A");
}
//
Future<void> main() async {
print(await drawAlphabet());
print("Alphabet..");
}
이 코드의 출력 결과는 다음과 같다.
Alphabet..
A
Future를 사용 않고 동기적으로 처리했을 경우 drawAlphabet이 나오기 전 까지는 Alphabet..이 출력되지 않지만, n초후 이것이 출력될것이라는 Future와 async, await와 같은 비동기 처리기능으로 인해 이런 결과가 나오게 되는 것이다.
'Flutter, Dart' 카테고리의 다른 글
[Flutter/Dart] Stream이란? (0) | 2024.11.13 |
---|