오늘은 일요일 내일 또 출근이라니..!
미래! 말 그대로 미래다
Future 미래, 미래에서 받아올 값 정도로 정의하겠다.
void main() {
Future.delayed(Duration(seconds: 2), () {
print('Delayed 끝');
});
// Delayed 끝
}
delayed 지연하다 기본적으로 2개의 파라미터를 받는다.
1. 지연할 기간이 얼마나 되는지 Duration
2. 지연 시간이 지난 후 실행할 함수
void main() {
addNumbers(1,1);
}
void addNumbers(int intNumber1, int intNumber2){
print('계산 시작 $intNumber1 + $intNumber2');
Future.delayed(Duration(seconds:2), (){
print('계산 완료 ${intNumber1 + intNumber2}');
});
print('함수 완료');
}
실행 결과
계산 시작 1 + 1
함수 완료
계산 완료 2
뭔가 맘에 안든다. 계산 시작 - 계산 완료 - 함수 완료가 되어야 한다고 생각한다.
그래서 사용하는 방법 우리는 async를 사용하는 방법이다.
void main() {
addNumbers(1,1);
}
void addNumbers(int intNumber1, int intNumber2) async {
print('계산 시작 $intNumber1 + $intNumber2');
await Future.delayed(Duration(seconds:2), (){
print('계산 완료 ${intNumber1 + intNumber2}');
});
print('함수 완료');
}
async 와 await를 걸어 우리가 원하는 로직을 만들어 냈다.
계산 시작 1 + 1
계산 완료 2
함수 완료
하지만 여기서 만약 addNumbers(1,1)밑에 비슷하게
addNumber(2,2)를 넣으면 첫번째 말고 같이 실행되서 async await를 main 함수 에다가도 걸어주고 싶은 마음이 생긴다.
방법은 함수에다가 Future를 걸어주는 방법이다.
void main () async {
await addNumbers(1,1);
await addNumbers(2,2);
}
Future<void> addNumbers(int intNumber1, int intNumber2) async {
print('계산 시작 $intNumber1 + $intNumber2');
await Future.delayed(Duration(seconds:2), (){
print('계산 완료 ${intNumber1 + intNumber2}');
});
print('함수 완료');
}
결과 값
계산 시작 1 + 1
계산 완료 2
함수 완료
계산 시작 2 + 2
계산 완료 4
함수 완료
뭔가 슬슬 감이 잡힌다. 다음에는 Stream에 대해서 깊게 다뤄볼 생각이다.