투케이2K

46. (Flutter/플러터) [Mac] : [Dart] : 다트 - async , await 사용해 프로그램 순차 동기 로직 구현 본문

Flutter

46. (Flutter/플러터) [Mac] : [Dart] : 다트 - async , await 사용해 프로그램 순차 동기 로직 구현

투케이2K 2024. 5. 28. 19:46

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Dart

 

[소스 코드]

import 'package:flutter/material.dart';
import 'dart:developer';


// -----------------------------------------------------------------------------------------
// TODO [main] : [application 의 진입점 역할]
// -----------------------------------------------------------------------------------------
void main() async {

  /**
   * ------------------------------------------------
   * [요약 설명]
   * ------------------------------------------------
   * 1. Future : 자바스크립트에서의 Promise 와 유사하며, 비동기 작업을 수행할 때 사용 됩니다
   * ------------------------------------------------
   * 2. 비동기 작업은 해당 작업이 완료되기 전에도 다른 작업을 실행할 수 있게 합니다
   * ------------------------------------------------
   * 3. async / await : Dart 의 비동기 처리를 위한 것으로 Future 를 조금 더 용이하게 다루기 위한 키워드입니다
   * ------------------------------------------------
   * 4. await 키워드를 사용한 함수는 무조건 async 함수이어야 합니다
   * ------------------------------------------------
   * 5. async 함수는 무조건 Future 를 반환해야 합니다
   * ------------------------------------------------
   * */


  // [로직 처리 수행]
  try {

    // [프로그램 시작 로그]
    log("");
    log("-------------------------------------------------------");
    log("Program :: Start");
    log("-------------------------------------------------------");
    log("");


    // [future 함수 호출] : main 함수에 async 키워드를 붙여서 await 호출 가능
    await futureMain();


    // [프로그램 동작 완료]
    log("");
    log("-------------------------------------------------------");
    log("Program :: End");
    log("-------------------------------------------------------");
    log("");

  }
  catch (e) {
    log("");
    log("-------------------------------------------------------");
    log("Catch :: ${e}");
    log("-------------------------------------------------------");
    log("");
  }

}





// -----------------------------------------------------------------------------------------
// TODO [Future] : [메인] : 함수 선언
// -----------------------------------------------------------------------------------------
Future<void> futureMain() async {
  log("");
  log("-------------------------------------------------------");
  log("futureMain :: Start");
  log("-------------------------------------------------------");
  log("");


  // [future 함수 호출] : futureMain 함수에 async 키워드를 붙여서 await 호출 가능
  var sub = await futureSub();


  log("");
  log("-------------------------------------------------------");
  log("futureMain :: ${sub}");
  log("-------------------------------------------------------");
  log("");
}





// -----------------------------------------------------------------------------------------
// TODO [Future] : [서브] : 함수 선언
// -----------------------------------------------------------------------------------------
Future<String> futureSub() {

  // [delayed] : 3초 지연 설정
  return Future<String>.delayed(Duration(seconds: 3), () {
    return "Success";
  });

}
 

[결과 출력]


반응형
Comments