Flutter/Dart

[DART] 비동기 프로그래밍(Future) 알아보기

연화 2025. 1. 15. 18:16

 

Dart는 비동기 프로그래밍을 지원하며, 이를 통해 프로그램의 흐름을 중단하지 않고 작업을 처리할 수 있습니다.
이번 포스팅에서는 Dart의 비동기 프로그래밍 개념과 Future 타입, 그리고 이를 활용한 실습 코드를 살펴보겠습니다.

 

💡 학습 목표
1. Dart 비동기 프로그래밍의 개념 이해하기
2. Future 타입 알아보기
3. Future.delayed 함수와 함께 Future 타입 활용해 보기

 

1. Dart 비동기 프로그래밍의 개념

동기 프로그래밍

  • 모든 코드가 순차적으로 실행됩니다.
  • 하나의 작업이 끝나야만 다음 작업이 실행됩니다.
  • 예: 파일 읽기 작업이 끝난 뒤에야 다음 코드가 실행.

비동기 프로그래밍

  • 코드가 동시다발적으로 실행됩니다.
  • 작업의 실행 순서가 보장되지 않습니다.
  • Dart 비동기 프로그래밍은 작업 완료를 기다리는 동안 다른 작업을 수행할 수 있도록 지원합니다.

Dart에서 비동기 프로그래밍을 위해 Future라는 데이터 타입을 사용합니다.

 

2. Future 타입이란?

Future란?

  • Future는 "미래에 어떤 값 또는 오류를 반환하겠다는 약속"을 나타냅니다.
  • async 함수 내부에서 await를 사용하여 Future가 완료될 때까지 실행을 잠시 멈추고 결과를 기다릴 수 있습니다.

Future와 관련된 주요 키워드

  • async: 비동기 함수를 선언합니다.
  • await: Future가 완료될 때까지 대기합니다.
  • Future.delayed: 지정한 시간만큼 대기 후 작업을 수행합니다.

 

3. Future 타입 실습

예제 1: Future와 async/await 사용해 보기

import 'package:flutter/material.dart';

// async / await 는 비동기 처리를 마치 동기적 방식으로 코드를 만들어 준다.
void main() async {
  print('tesk 1 ...................');
  var data1 = await fetchData();
  print('tesk 2 ...................');
  print('tesk 3 ...................');
  print('data1 확인 : ${data1}');
}

Future<String> fetchData() {
  return Future.delayed(
    Duration(seconds: 3),
    () {
      return '3초 동안 기다렸어... ';
    },
  );
}

 

  • fetchData() 함수는 3초 후에 "3초 동안 기다렸어..."라는 문자열을 반환하는 Future를 반환합니다.
  • await fetchData()는 3초 동안 대기하고, Future가 완료되면 데이터를 받아옵니다.
  • 결과적으로 data1 변수에 데이터가 저장되고 출력됩니다.

 

예제 2: Future.delayed와 계산 처리

void main() async {
  await addNumber1(10, 20);
  print('메인 함수 완료');
}

// 1 단계
// Future 타입을 동기적 방식으로 소화하자.
Future<void> addNumber1(int n1, int n2) async {
  print('addNumber1 함수 시작');
  // 함수 내부의 결과값은 지역 변수를 무조건 만드는 것이 권장...
  var result = 0;
  await Future.delayed(Duration(seconds: 3), () {
    result = n1 + n2;
  });
  print('addNumber1 연산 완료 : ${result}');
  // return result;
}

 

 

  • addNumber1 함수는 두 숫자의 합을 계산하고, 결과를 출력하는 비동기 함수입니다.
  • Future.delayed를 사용하여 계산 작업을 3초 후에 수행하도록 설정했습니다.
  • 결과는 result에 저장된 뒤 출력됩니다.

 

 

예제 3: Future와 then 메서드 활용

void main() {
  // 소화 1 방식 async / await 사용 방법
  // 소화 2 방식 then

  // 비동기 방식으로 콜백으로 이벤트 핸들러 처리를 한다.
  addNumber2(10, 5).then((value) => print('결과값 출력 : ${value}'));
  print('main() 함수 종료');
}

Future<int> addNumber2(int n1, int n2) {
  return Future.delayed(Duration(seconds: 3), () => n1 + n2);
}

 

  • addNumber2 함수는 두 숫자의 합을 계산하여 Future로 반환합니다.
  • then 메서드를 사용하여 Future가 완료된 후 결과를 출력하도록 설정했습니다.
  • main 함수는 즉시 종료 메시지를 출력하고, 3초 뒤 계산 결과가 출력됩니다.

 

 

Dart에서 비동기 프로그래밍은 프로그램의 효율성을 높이는 데 중요한 역할을 합니다.
Futureasync/await 키워드를 사용하면 복잡한 비동기 작업도 동기식 코드처럼 작성할 수 있다고 합니다.

 

💡 요약

Future는 비동기 작업의 결과를 나타냅니다.
async/await를 사용하여 비동기 작업을 동기식처럼 처리할 수 있습니다.
Future.delayed를 활용하면 특정 시간 후 작업을 실행할 수 있습니다.

 

'Flutter > Dart' 카테고리의 다른 글

[DART] dart의 추상 클래스  (1) 2025.01.07
[DART] OOP 연관관계와 Mixin  (1) 2025.01.07
[DART] 상속(Inheritance)이란 무엇인가요?  (0) 2025.01.06
[DART] Sound Null Safety in dart  (0) 2025.01.06
[DART] 클래스와 인스턴스  (2) 2025.01.03