Flutter

Flutter - Future, async, await

바차 2021. 10. 7. 00:15
반응형

[Future]

- 미래에 구체적인 결과물로 실제적인 객체로 반환된다는 의미

 

- 일종의 약속이자, 해당 결과를 추후에 확인 가능하다는 의미

 

- Future 클래스는 일정 소요시간이 지난 후에 실제 데이터 값이나, 에러가 있는 경우 에러를 반환한다.

 

- Future 클래스는 Future<String>같이, 제네릭처럼 어떤 결과물을 받아야 할지 미리 지정해둘 수 있다.

 

- Future<void>와 일반 void 함수의 차이점은 언제 함수의 실행이 끝날지 지정해 줄수 있다는 것.

[async]

- async 클래스는 await 메서드를 가지고 있다.

 

- await 으로 선언된 메서드는 응답이 처리될 때 까지 대기하는 비동기 식으로 동작한다.

 

- async제어자는 항상 중괄호 앞에 선언해야 한다. 선헌하게 되면 await 키워드를 사용할 수 있게 된다.

 

 

 

 

 

 

 

[예제 코드]

 

import 'dart:io';

void main() {
  showData();
}

void showData() async{
  startTask();
  String account = await accessData();
  fetchData(account);
}

void startTask() {
  String info1 = '요청 수행 시작';
  print(info1);
}

Future<String> accessData() async{
  String account;
  Duration time = Duration(seconds: 3);

  if (time.inSeconds > 2) {
    //sleep(time);

    // await 키워드는 Future.delayed의 실행이 다 될때까지 기다리라는 의미
    await Future.delayed(time, () {
      account = '8,500만원';
      print(account);
    });
  } else {
    String info2 = '데이터를 가져왔습니다.';
    print(info2);
  }
  return account;
}

void fetchData(String account) {
  String info3 = '잔액은 $account 입니다.';
  print(info3);
}

 

 

await 키워드가 없을 때 실행 화면

 

 

 

 

 

await 키워드가 있을 때 실행 화면

300x250