synchronous

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

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

// result
계산중: 1 + 1
계산 완료: 1 + 1
계산중: 2 + 2
계산 완료: 2 + 2

Asynchronous : Future 사용


void main() {
  // Future 
  // 미래에 받아올 값
  Future<String> name = Future.value('코드팩토리'); // 미래에 받아올 String 값
  Future<int> number = Future.value(1);
  Future<bool> isTrue = Future.value(true);
  
  print('함수 시작');
  
  // 2개의 파라미터
  // delayed - 지연되다
  // 1번 파라미터 - 지연할 기간 (얼마나 지연할건지) Duration
  // 2번 파라미터 - 지연 시간이 지난 후 실행할 "함수"
  Future.delayed(Duration(seconds: 2), (){
    print('Delay 끝');
  });
}

// 실행결과
함수 시작
(2초 후)
Delay 끝 
void main() {
  addNumbers(1, 1);
}

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

// 실행 결과
계산 시작 : 1 + 1
함수 완료
계산 완료: 1 + 1 = 2
void main() {
  addNumbers(1, 1);
  addNumbers(2, 2);
}

// 실행 결과
계산 시작 : 1 + 1
함수 완료 : 1 + 1
계산 시작 : 2 + 2
함수 완료 : 2 + 2
계산 완료: 1 + 1 = 2
계산 완료: 2 + 2 = 4

async - await


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

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

// 실행결과
계산 시작 : 1 + 1
계산 완료: 1 + 1 = 2
함수 완료 : 1 + 1
void main() {
  addNumbers(1, 1);
  addNumbers(2, 2);
}

// 실행결과
계산 시작 : 1 + 1  // 1번함수 - await 때문에 2초 기다리는 중
계산 시작 : 2 + 2  // 2번함수 시작 (1번 함수가 끝나지 않았지만 2번 함수 시작됨)
계산 완료: 1 + 1 = 2 
함수 완료 : 1 + 1
계산 완료: 2 + 2 = 4
함수 완료 : 2 + 2
void main() async {
  await addNumbers(1, 1);
  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');
}

// 실행결과
계산 시작 : 1 + 1
계산 완료: 1 + 1 = 2
함수 완료 : 1 + 1
계산 시작 : 2 + 2
계산 완료: 2 + 2 = 4
함수 완료 : 2 + 2