[FLUTTER] 다트 주요 라이브러리 둘러보기 - 4 / A Tour of the Dart Libraries
- 다트 라이브러리의 주요 기능의 사용 방법 및 예시를 볼 예정 입니다.
- TL;DR : 최대한 내용을 요약하여 표현했습니다.
- 좀 더 자세하고 상세한 내용을 보고 싶으시면 위 원문 링크를 참조 바랍니다.
플러터란 ? 구글에서 개발한 크로스 플랫폼 앱 개발 프레임워크며, 언어는 구글이 개발한 Dart 를 사용합니다. 안드로이드, iOS, Web, Desktop 을 지원하며 구글의 차기 OS Fuchsia의 메인개발환경이 된다고 하네요 :)
이전 글
- [FLUTTER] 다트 주요 라이브러리 둘러보기 - 3 / A Tour of the Dart Libraries
- [FLUTTER] 다트 주요 라이브러리 둘러보기 - 2 / A Tour of the Dart Libraries
- [FLUTTER] 다트 주요 라이브러리 둘러보기 - 1 / A Tour of the Dart Libraries
dart:async - 비동기 프로그래밍
Dart 에서는 Future 와 Stream 을 사용하여 비동기를 처리합니다.
- 참조 1) Future 또는 Stream API 를 직접 사용할 필요는 없습니다. Dart에서는 async 및 await와 같은 키워드를 사용한 비동기 코딩을 지원합니다.
- 참조 2) Dart 버전 2.1 부터는
dart:core
에 async가 포함되여dart:async
를 별도로 import 할 필요가 없습니다.
8. Future
Future 객체는 비동기 메소드에 의해 반환 된 객체로 나타납니다. ( javascript 의 Promise 와 유사 )
then 구문을 통해 비동기 작업 종료 이후 하위 작업을 수행하게 됩니다. findEntryPoint() => runExecutable() => flushThenExit()
runUsingFuture() {
// ...
findEntryPoint().then((entryPoint) {
return runExecutable(entryPoint, args);
}).then(flushThenExit);
}
- await을 사용하기 위해서는 함수 앞에 async 를 선언하면 됩니다.
- 위 코드와 동일하며 동기로 동작하는 것처럼 보여집니다.
runUsingAsyncAwait() async {
// ...
var entryPoint = await findEntryPoint();
var exitCode = await runExecutable(entryPoint, args);
await flushThenExit(exitCode);
}
- 오류처리 예시
var entryPoint = await findEntryPoint();
try {
var exitCode = await runExecutable(entryPoint, args);
await flushThenExit(exitCode);
} catch (e) {
// 에러를 처리 ...
}
8.1. 기본 사용방법
then()을 사용하여 Future 가 완료 될 때 실행되는 코드를 스케줄링 할 수 있습니다. 예를 들어 HTTP 요청에 시간이 걸릴 수 있으므로 HttpRequest.getString() 은 Future를 반환합니다.
HttpRequest.getString(url).then((String result) {
print(result);
});
- getString() 호출 시(Future를 리턴하는 함수) 발생하는 오류 처리는 catchError 를 사용하면 됩니다.
- then() 내부 오류 처리는 try ~ catch 를 활용하여 처리해야 됩니다.
HttpRequest.getString(url).then((String result) {
print(result);
}).catchError((e) {
// Handle or ignore the error.
});
8.2. 여러 비동기 메서드 체인닝하기
then() 메서드는 Future를 반환하여 특정 순서로 여러 비동기 함수를 실행하는 유용한 방법을 제공합니다. then() 으로 등록 된 콜백이 Future를 반환하면 then() 은 동일하게 Future를 반환합니다.
Future result = costlyQuery(url);
result
.then((value) => expensiveWork(value))
.then((_) => lengthyComputation())
.then((_) => print('Done!'))
.catchError((exception) {
/* Handle exception... */
});
- await 을 활용한 위와 동일한 코드
try {
final value = await costlyQuery(url);
await expensiveWork(value);
await lengthyComputation();
print('Done!');
} catch (e) {
/* Handle exception... */
}
8.3. 여러개의 Future 기다리기
때로는 많은 비동기 함수를 호출하고, 모두 완료 될 때까지 기다려야 할 때가 있습니다. Future.wait() 메서드를 사용하여, 여러 Future 가 완료 될 때까지 기다립니다.
- javascript 의 Promise.all()과 유사하네요 음...
Future deleteLotsOfFiles() async => ...
Future copyLotsOfFiles() async => ...
Future checksumLotsOfOtherFiles() async => ...
await Future.wait([
deleteLotsOfFiles(),
copyLotsOfFiles(),
checksumLotsOfOtherFiles(),
]);
print('Done with all the long steps!');
맺음말
이번 시간에는 Future에 대해 알아봤습니다. 비동기를 처리하는 유용한 방법이며 javascript에 익숙한 분들은 Promise 를 떠오르시면 될것 같습니다 :) 요즘 게임좀 하느라 연재글이 좀 늦어 졌네요 ㅜㅜ
- 이전 시간에 배운 A Tour of the Dart Language 1 2 3 4 는 여유 되시면 반복 학습 부탁 드립니다. 위 내용이 학습된 상태에서 본 내용을 습득해야 이해가 빠른편인지라 ... :)
읽기 힘든 글 읽어주셔서 (또는 눈팅 이라도) 감사합니다
관련 글 링크
@flutters : 제가 작성한 글 중 fluter 관련 글만 모아서 리스팀 처리
관련글(영문)
연재글
- [FLUTTER] 다트 주요 라이브러리 둘러보기 - 3 / A Tour of the Dart Libraries
- [FLUTTER] 다트 주요 라이브러리 둘러보기 - 2 / A Tour of the Dart Libraries
- [FLUTTER] 다트 주요 라이브러리 둘러보기 - 1 / A Tour of the Dart Libraries
- [FLUTTER] DART 언어 기초과정 - 4 / A Tour of the Dart Language
- [FLUTTER] DART 언어 기초과정 - 3 / A Tour of the Dart Language
- [FLUTTER] DART 언어 기초과정 - 2 / A Tour of the Dart Language
- [FLUTTER] DART 언어 기초과정 - 1 / A Tour of the Dart Language