Future란? 

Future는 미래의 값(비동기 처리되어야 할 값)을 의미한다. 

Future는 Future<타입명>  형태로 제네릭을 사용한다.(미래에 받을 값의 타입을 지정해 주는 것!)

 

동기 (synchronous)
요청을 보내고 응답이 오면 그 다음 동작을 처리하는 방식

비동기(asynchronous)
요청을 보낸 후 응답이 없어도 다음 동작을 실행하는 방식

 

비동기 프로그래밍이 필요한 이유

Dart 언어는 프로그램 하나당 스레드 하나를 사용하는데 파이프 안에 실행 작업 하나가 들어가는 형태로 생각해 본다.

파이프 입구로 하나의 작업이 들어가고 끝으로 나올 때까지 소요되는 시간이 있는데 파이프에 들어간 작업마다 완료되는 작업 시간이 다 다르다. 오래 걸리는 작업이 진행 중일 때는 파이프가 막혀서 빨리 완료될 수 있는 작업들도 계속 기다리게 되는 현상이 생긴다.

이런 현상을 방지하기 위해서 비동기 프로그래밍이 필요하다. 

 

  • 동기 작업 : 동기 작업은 완료될 때까지 다른 작업의 실행을 차단합니다.
  • 동기 함수 : 동기 함수는 동기 작업만 수행합니다.
  • 비동기 작업 : 비동기 작업이 시작되면 완료되기 전에 다른 작업을 실행할 수 있습니다.
  • 비동기 함수 : 비동기 함수는 하나 이상의 비동기 작업을 수행하며 동기 작업도 수행할 수 있습니다.

 

Async Programing을 사용하는 방법

  • Future API
  • async await keyword

비동기 값을 처리하는 방법 

  • call back
  • async-await
  • then

https://dart.dev/codelabs/async-await

 

Asynchronous programming: futures, async, await

Learn about and practice writing asynchronous code in DartPad!

dart.dev

  • 다트는 프로그램 하나랑 스레드 하나를 사용한다. (단일 스레드에서 실행)
  • 스레드를 차단하는 코드는 프로그램을 정지시킬 수 있다.
  • Future는 Async 코드의 결과를 나타낸다. 처리 또는 입출력은 나중에 완료된다.
  • future가 완료될 때까지 실행을 일시 중단하려면 Async함수에서 Await를 사용하면 된다.
  • Async함수에서 Try catch를 사용해서 에러를 잡는다.

 

 

Future<T> Class
https://api.flutter.dev/flutter/dart-async/Future-class.html

 

Future class - dart:async library - Dart API

The result of an asynchronous computation. An asynchronous computation cannot provide a result immediately when it is started, unlike a synchronous computation which does compute a result immediately by either returning a value or by throwing. An asynchron

api.flutter.dev

 

복사했습니다!