다트 비동기 프로그래밍(Dart async Programming)란 무엇일까.

비동기 프로그래밍은 작업을 요청한 뒤 결과를 기다리지 않고 다른 작업을 먼저 처리할 수 있도록 하는 프로그래밍 방식 입니다. 

동기 프로그래밍 같은 경우 작업이 끝날 때까지 기다리고 다음 코드를 실행하는 반면 비동기는 작업을 시작해두고 다른 작업도 동시에 시작하는 것을 의미 합니다. 

 

Future

비동기 작업의 결과를 담는 객체 입니다. 

미래에 완료될 작업을 나타내며, 주로 네트워크 요청, 파일 읽기처럼 시간이 걸리는 작업에 사용 합니다. 

비동기적 프로그래밍은 위에서 한줄씩 처리되는 동기 프로그래밍과 달리 위에서 한줄씩 처리하되 비동기 처리할 코드를 endpoint 에 저장해 놓고 다음 작업을 진행할 수 있습니다. 

결과적으로 아래 코드는 동기로 진행했을 경우 "요청 -> 2초대기 후 결과 -> 요청 완료" 순으로 진행되었어야 하지만,

비동기 프로그래밍 적용으로 "요청 -> 요청 완료 -> 결과" 순으로 순서가 변경 됩니다. 

우리 개발자 입장에서는 2초의 대기 시간동안 다른 작업(요청 완료)을 진행할 수 있는게 비동기 프로그래밍의 핵심 입니다.

void main() {
  say(1, 1);
}

void say(int a, int b) {
  print('요청 : ${a} + ${b}');

  Future.delayed(Duration(seconds: 2), () {
    print('결과 : ${a + b}');
  });

  print('요청 완료');
}

요청 : 1 + 1
요청 완료
요청 : 2 + 2
요청 완료
결과 : 2
결과 : 4

 

await

Future가 완료될 때까지 기다리는 키워드 입니다. 

비동기 작업이 끝날 때까지 다음 코드 실행을 잠시 멈춥니다. 

async 함수 안에서만 사용 가능 합니다. 

await 사용하면 결과값이 달라지는 것을 볼 수 있습니다. 

그럼 await 동기랑 같은거 아니냐고 생각하실 수 있지만 아닙니다. 

await 대기할 때, 다른 스레드가 작업을 실행 합니다. 

그 증거로 say(1,1) 함수 실행 후 2초 대기하는 동안 say(2,2) 가 실행 되는 것을 볼 수 있습니다. 

void main() {
  say(1, 1);
  say(2,2);
}

void say(int a, int b) async {
  print('요청 : ${a} + ${b}');

  await Future.delayed(Duration(seconds: 2), () {
    print('결과 : ${a + b}');
  });

  print('요청 완료');
}


요청 : 1 + 1
요청 : 2 + 2
결과 : 2
요청 완료
결과 : 4
요청 완료

 

await 사용해서 동기처럼 처리할 수 있습니다. 

main 함수에도 async 사용하면 await 키워드이 사용가능하며, 

say(1,1) 함수가 완료될 때까지 대기하게 됩니다. 

결과적으로 동기 형식과 결과는 같지만 데이터 플로우는 다른 것 입니다. 

void main() async {
  await say(1, 1);
  await say(2, 2);
}

Future<void> say(int a, int b) async {
  print('요청 : ${a} + ${b}');

  await Future.delayed(Duration(seconds: 2), () {
    print('결과 : ${a + b}');
  });

  print('요청 완료');
}

요청 : 1 + 1
결과 : 2
요청 완료
요청 : 2 + 2
결과 : 4
요청 완료

 

Return Future

비동기 함수도 일반 함수와 동일하게 return 값이 존재 합니다. 

return 타입은 Future<T> 타입으로 익숙하지 않을 수 있는데요. 

걱정하실 필요 없이 일반 함수와 동일하게 return 해주시면 됩니다. 

void main() async {
  final result1 = await say(1, 1);
  final result2 = await say(2, 2);

  print(result1 + result2);
}

Future<int> say(int a, int b) async {
  print('요청 : ${a} + ${b}');

  await Future.delayed(Duration(seconds: 2), () {
    print('결과 : ${a + b}');
  });

  print('요청 완료');

  return a + b;
}

'Dart' 카테고리의 다른 글

다트 스트림(Dart Stram)이란 무엇일까.  (0) 2025.07.16
다트 함수(Dart Function Programming)란 무엇일까.  (1) 2025.07.09
다트 제네릭(Dart Generic)란 무엇일까.  (2) 2025.07.08
다트 인터페이스(Dart Interface)란 무엇일까.  (0) 2025.07.08
다트(Dart) 상속(inheritance)이란 무엇일까.  (0) 2025.07.07
'Dart' 카테고리의 다른 글
  • 다트 스트림(Dart Stram)이란 무엇일까.
  • 다트 함수(Dart Function Programming)란 무엇일까.
  • 다트 제네릭(Dart Generic)란 무엇일까.
  • 다트 인터페이스(Dart Interface)란 무엇일까.
memoryman
memoryman
memoryman 님의 블로그 입니다.
  • memoryman
    MEMORYMAN STACK
    memoryman
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • Dart (11)
      • Python (2)
      • C# (1)
      • DB (5)
      • Algorithm (1)
      • Project (4)
      • IT (12)
      • .NET (7)
      • Flutter (12)
  • 블로그 메뉴

    • 프로필
    • 방명록
    • 메모장
    • 자소서
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    D
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
memoryman
다트 비동기 프로그래밍(Dart async Programming)란 무엇일까.
상단으로

티스토리툴바