상세 컨텐츠

본문 제목

4-1. Asynchronous Programming (비동기 프로그래밍)

Flutter(Dart 포함)

by 본투비곰손 2023. 9. 7. 22:51

본문

728x90

CUP의 작동 방식

Synchronous Programming서버 응답이 올 때까지 CPU 사용 불가

void main() {
  addNumbers(1, 1);
  addNumbers(2, 2);
}
// 1 + 1 = 2
// 2 + 2 = 4

void addNumbers(int number1, number2) {
  print('계산중: $number1 + $number2');

  print('계산 완료: $number1 + $number2');
}

void main() {
  //Future = 미래
  // 미래에 받아 올 값
  Future<String> name = Future.value('에스파');
  Future<int> number = Future.value(4);
  Future<bool> isTrue = Future.value(true);
  
  addNumbers(1, 1);
  addNumbers(2, 2);
}
// 1 + 1 = 2
// 2 + 2 = 4

void addNumbers(int number1,int number2) {
  print('계산 시작: $number1 + $number2');
  
  //서버 시뮬레이션
  Future.delayed(Duration(seconds: 2), (){
    print('계산 완료: $number1 + $number2 = 
    ${number1+number2}');
  });
  print('함수 완료');
}

Future.delayed를 사용 하여 2초 후 함수를 실행하게 하고 2초 동안 멈춰 있지 않고 나머지 다른 함수를 실행 하였다.

void main() {
  //Future = 미래
  // 미래에 받아 올 값
  Future<String> name = Future.value('에스파');
  Future<int> number = Future.value(4);
  Future<bool> isTrue = Future.value(true);
  
  addNumbers(1, 1);
  addNumbers(2, 2);
}
// 1 + 1 = 2
// 2 + 2 = 4

void addNumbers(int number1,int number2) async {
  print('계산 시작: $number1 + $number2');
  
  //서버 시뮬레이션
 await Future.delayed(Duration(seconds: 2), (){
    print('계산 완료: $number1 + $number2 
    = ${number1+number2}');
  });
  print('함수 완료: $number1 + $number2');
}

await 를 사용 하면 함수안의 await를 포함한 나머지 함수를 2초 후 모두 실행 하게 한다. 하지만 2초 멈춰 있는 것이 아니기 때문에 다른 함수는 바로 실행 할 수 있다.

void main() {
  addNumbers(1, 1);
  print('다른 명령은 바로 실행 한다.');
}

void addNumbers(int number1,int number2) async {
  print('계산 시작: $number1 + $number2');
  
  //서버 시뮬레이션
 await Future.delayed(Duration(seconds: 2), (){
    print('계산 완료: $number1 + $number2 = 
    ${number1+number2}');
  });
  print('함수 완료: $number1 + $number2');
}

await 를 사용 하면 함수안의 await를 포함한 나머지 함수를 2초 후 모두 실행 하게 한다. 하지만 2초 멈춰 있는 것이 아니기 때문에 다른 함수는 바로 실행 할 수 있다.

void main() async{
  await addNumbers(1, 1);
  print ('하나의 함수가 끝나고 시작');
  await addNumbers(2, 2);
}

Future<void> addNumbers
(int number1, int number2) async {
  print('계산 시작: $number1 + $number2');
  
  //서버 시뮬레이션
 await Future.delayed(Duration(seconds: 2), (){
    print('계산 완료: $number1 + $number2 = 
    ${number1+number2}');
  });
  print('함수 완료: $number1 + $number2');
}

함수 하나가 2초 후 끝나고 순차적으로 실행 되게 하려면 좌측과 같이 작성 하면 된다.

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

  print('result1: $result1');
  print('result2: $result2');
  print('result1 + result1 : ${result1 + result2}');
}

Future<int> addNumbers(int number1, int number2) async {
  print('계산 시작: $number1 + $number2');

  //서버 시뮬레이션
  await Future.delayed(Duration(seconds: 2), () {
    print('계산 완료: $number1 + $number2 = ${number1 + number2}');
  });
  print('함수 완료: $number1 + $number2');

  return number1 + number2;
}

미래에 받을 값의 형식을 정해주고 값을 리턴 하게 되면 변수에 결과 값을 저장 할 수 있다.

728x90

관련글 더보기