본문 바로가기
프로그래밍/Dart

[Dart] 7. Dart의 "비동기 프로그래밍"

by iwbap 2024. 6. 19.
728x90

Dart 학습: 비동기 프로그래밍

비동기 프로그래밍은 시간이 걸리는 작업을 효율적으로 처리할 수 있게 해줍니다. Dart에서는 Future, async, await, 그리고 Stream을 사용하여 비동기 프로그래밍을 구현할 수 있습니다. 이번 글에서는 Future 사용법, 비동기 함수 작성 및 호출, 스트림 사용법에 대해 알아보겠습니다.


1. Future: Future 사용법

Future는 비동기 작업의 결과를 나타내는 객체입니다. Future는 시간이 걸리는 작업이 완료된 후 값을 반환하거나, 오류가 발생할 경우 예외를 던질 수 있습니다.

 

Future 사용 예제:

[dart]
 
Future<String> fetchUserOrder() {
  // 2초 후에 결과 반환
  return Future.delayed(Duration(seconds: 2), () => 'User Order: Latte');
}

void main() {
  print('Fetching user order...');
  
  Future<String> order = fetchUserOrder();
  
  order.then((value) {
    print(value);  // User Order: Latte 출력
  }).catchError((error) {
    print('Error: $error');
  });
  
  print('Order request sent');
}
 

위의 예제에서 fetchUserOrder 함수는 Future.delayed를 사용하여 2초 후에 결과를 반환하는 Future를 생성합니다. then 메서드를 사용하여 비동기 작업이 완료된 후 결과를 처리할 수 있습니다.


2. async와 await: 비동기 함수 작성 및 호출

async와 await 키워드를 사용하면 비동기 함수를 작성하고 호출할 때 동기 함수처럼 직관적으로 코드를 작성할 수 있습니다.

 

async와 await 사용 예제:

[dart]
 
Future<String> fetchUserOrder() {
  return Future.delayed(Duration(seconds: 2), () => 'User Order: Latte');
}

Future<void> main() async {
  print('Fetching user order...');
  
  try {
    String order = await fetchUserOrder();
    print(order);  // User Order: Latte 출력
  } catch (error) {
    print('Error: $error');
  }
  
  print('Order request sent');
}
 

위의 예제에서 main 함수는 async로 선언되어 비동기 함수를 호출할 수 있습니다. await 키워드를 사용하여 Future가 완료될 때까지 기다린 후 결과를 처리합니다.


3. Stream: 스트림 사용법

Stream은 비동기 데이터의 연속적인 흐름을 처리하는데 사용됩니다. 스트림은 여러 개의 비동기 이벤트를 순차적으로 처리할 수 있습니다.

 

Stream 사용 예제:

[dart]
 
Stream<int> countStream(int to) async* {
  for (int i = 1; i <= to; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i;
  }
}

Future<void> main() async {
  Stream<int> stream = countStream(5);
  
  await for (int value in stream) {
    print(value);  // 1부터 5까지 1초 간격으로 출력
  }
}
 

위의 예제에서 countStream 함수는 비동기적으로 숫자를 생성하는 Stream을 반환합니다. async* 키워드와 yield를 사용하여 스트림 데이터를 생성합니다. await for 구문을 사용하여 스트림의 각 이벤트를 비동기적으로 처리합니다.


이 글에서는 Dart의 비동기 프로그래밍에 대해 알아보았습니다. Future를 사용한 비동기 작업 처리, async와 await를 사용한 비동기 함수 작성 및 호출, 그리고 Stream을 사용한 비동기 데이터 스트림 처리를 이해하고 활용하면 더 효율적이고 직관적인 비동기 코드를 작성할 수 있습니다. 다음 단계에서는 파일 입출력에 대해 학습해보세요. Happy Coding!

728x90