IT기술/다트 (dart)

Dart 비동기 프로그래밍: Future, async, await, Stream

후스파 2025. 3. 26. 10:54
반응형
다트 Dart

Dart에서 비동기 프로그래밍은 효율적인 앱 개발을 위한 핵심 요소입니다. 특히 Flutter 앱에서 네트워크 요청이나 파일 작업 같은 시간이 걸리는 작업을 처리할 때 필수적인 개념입니다.

Future란?

Future는 미래의 어느 시점에 완료될 작업의 결과를 나타내는 객체입니다. 키오스크에서 음식을 주문하고 주문번호를 받은 후 기다리는 것과 유사합니다.

import 'dart:async';

Future<int> futureNumber() {
  // 3초 후 100이 반환됩니다
  return Future<int>.delayed(Duration(seconds: 3), () {
    return 100;
  });
}

void main() {
  Future<int> future = futureNumber();
  future.then((val) {
    print('val: $val');
  }).catchError((error) {
    print('error: $error');
  });
  print('기다리는 중');
}
 
 

실행 결과:

기다리는 중
val: 100
 
 

async와 await

async/await는 Future를 더 직관적으로 다루기 위한 키워드입니다.

중요한 규칙

  1. await 키워드를 사용하려면 함수에 async를 붙여야 합니다.
  2. async 함수는 항상 Future를 반환합니다.
  3. await는 비동기 처리가 완료될 때까지 함수의 실행을 일시 중지합니다.

잘못된 예제

String createOrderMessage() {
  var order = fetchUserOrder();
  return 'Your order is: $order';
}

Future<String> fetchUserOrder() =>
  Future.delayed(
    const Duration(seconds: 2),
    () => 'Large Latte',
  );

void main() {
  print(createOrderMessage());
}
 
 

출력 결과:

Your order is: Instance of '_Future<String>'
 
 

올바른 예제

Future<String> createOrderMessage() async {
  var order = await fetchUserOrder();
  return 'Your order is: $order';
}

Future<String> fetchUserOrder() =>
  Future.delayed(
    const Duration(seconds: 2),
    () => 'Large Latte',
  );

Future<void> main() async {
  print('Fetching user order...');
  print(await createOrderMessage());
}
 
 

출력 결과:

Fetching user order...
Your order is: Large Latte
 
 

await의 동작 방식

await 키워드는 비동기 처리가 완료될 때까지 해당 함수의 실행을 멈춥니다. 이는 비동기 코드를 마치 동기 코드처럼 작성할 수 있게 해 줍니다.

Future<ProcessedData> createData() async {
  final id = await _loadFromDisk();
  final data = await _fetchNetworkData(id);
  return ProcessedData(data);
}
 
 

위 코드에서:

  1. _loadFromDisk()가 완료될 때까지 기다립니다.
  2. 완료되면 그 결과를 id에 저장합니다.
  3. _fetchNetworkData(id)가 완료될 때까지 기다립니다.
  4. 최종 결과를 반환합니다.

비동기 프로그래밍의 장점

  1. UI 응답성 향상: 시간이 오래 걸리는 작업을 처리하는 동안에도 UI가 멈추지 않습니다.
  2. 효율적인 리소스 사용: 작업이 완료되기를 기다리는 동안 다른 작업을 수행할 수 있습니다.
  3. 코드 가독성: async/await를 사용하면 비동기 코드를 동기 코드처럼 작성할 수 있어 가독성이 향상됩니다.

주의사항

  1. await는 반드시 async 함수 내에서만 사용할 수 있습니다.
  2. async 함수는 항상 Future를 반환해야 합니다.
  3. 비동기 작업의 결과를 사용하려면 await를 사용하거나 then() 메서드를 활용해야 합니다.

Dart의 비동기 프로그래밍은 Flutter 앱 개발에서 필수적인 요소이며, 이를 통해 사용자 경험을 크게 향상할 수 있습니다.

 

 

[Dart] 다트 비동기 프로그래밍

Dart는 동기 및 비동기 프로그래밍을 지원하여, 효율적인 코드 실행과 사용자 경험을 개선하는 데 도움을 ...

blog.naver.com

 

 

다트(Dart)의 객체지향 프로그래밍(OOP) 개념

클래스와 객체클래스는 객체를 생성하기 위한 청사진입니다. Dart에서 클래스를 정의하고 사용하는 방법은 다음과 같습니다:class Person { String name; int age; Person(this.name, this.age); void introduce() { print(

hoosfa.tistory.com

 

반응형