[FLUTTER] 다트 주요 라이브러리 둘러보기 - 4 / A Tour of the Dart Libraries

in #dart6 years ago

출처 : https://www.dartlang.org/guides/libraries/library-tour

  • 다트 라이브러리의 주요 기능의 사용 방법 및 예시를 볼 예정 입니다.
  • TL;DR : 최대한 내용을 요약하여 표현했습니다.
  • 좀 더 자세하고 상세한 내용을 보고 싶으시면 위 원문 링크를 참조 바랍니다.

플러터란 ? 구글에서 개발한 크로스 플랫폼 앱 개발 프레임워크며, 언어는 구글이 개발한 Dart 를 사용합니다. 안드로이드, iOS, Web, Desktop 을 지원하며 구글의 차기 OS Fuchsia의 메인개발환경이 된다고 하네요 :)

이전 글

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 관련 글만 모아서 리스팀 처리

관련글(영문)

연재글

설치/설정


aaronhong_banner.jpg