๊ด€๋ฆฌ ๋ฉ”๋‰ด

ruriruriya

[Dart] async์™€ await๋กœ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ณธ๋ฌธ

๐Ÿ“ฑFlutter/Dart

[Dart] async์™€ await๋กœ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ฃจ๋ฆฌ์•ผใ…‘ 2024. 12. 18. 15:42
๋ฐ˜์‘ํ˜•

Dart ์–ธ์–ด์—์„œ async์™€ await๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค์›Œ๋“œ์ด๋‹ค.
ํŠนํžˆ ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ํŒŒ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ, ํƒ€์ด๋จธ ๋“ฑ์˜ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

๐Ÿ’ก ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?
- ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—… ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ํ•ด๋‹น ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—…์ด ๋ฉˆ์ถ”์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹
- Dart์—์„œ๋Š” Future ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
(Future : ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด, ๊ฒฐ๊ณผ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ์ค€๋‹ค.)

 

1. async์™€ await ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

- async : ํ•จ์ˆ˜์— ๋น„๋™๊ธฐ ์ž‘์—…์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ํ•ญ์ƒ Future ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
- await : ๋น„๋™๊ธฐ ์ž‘์—…(Future)์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋Š” ๋œป์œผ๋กœ, await๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ 
- await๋Š” ํ•ญ์ƒ async ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. await ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ.
- ๊ทธ๋ฆฌ๊ณ  await๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์“ฐ๋ฉด ์ฝ”๋“œ๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋Š”
fetchData ํ•จ์ˆ˜๋Š” ๋น„๋™๊ธฐ๋กœ ์‹คํ–‰๋˜๊ณ , 2์ดˆ ๋Œ€๊ธฐ ํ›„ "๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค!"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
๊ทธ๋™์•ˆ main ํ•จ์ˆ˜์˜ ๋‹ค๋ฅธ ์ž‘์—…์€ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์ง„ํ–‰๋œ๋‹ค.

Future<void> fetchData() async {
  print("๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘...");
  await Future.delayed(Duration(seconds: 2)); // 2์ดˆ ๋Œ€๊ธฐ
  print("๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค!");
}

void main() {
  fetchData();
  print("๋‹ค๋ฅธ ์ž‘์—… ์ง„ํ–‰ ์ค‘...");
}

์ถœ๋ ฅ ๊ฒฐ๊ณผ

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ค‘...
๋‹ค๋ฅธ ์ž‘์—… ์ง„ํ–‰ ์ค‘...
๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค!

 

2. ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ

await๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Future<void> task1() async {
  print("์ž‘์—… 1 ์‹œ์ž‘");
  await Future.delayed(Duration(seconds: 1));
  print("์ž‘์—… 1 ์™„๋ฃŒ");
}

Future<void> task2() async {
  print("์ž‘์—… 2 ์‹œ์ž‘");
  await Future.delayed(Duration(seconds: 2));
  print("์ž‘์—… 2 ์™„๋ฃŒ");
}

Future<void> main() async {
  await task1();
  await task2();
  print("๋ชจ๋“  ์ž‘์—… ์™„๋ฃŒ");
}

์ถœ๋ ฅ๊ฒฐ๊ณผ

์ž‘์—… 1 ์‹œ์ž‘
์ž‘์—… 1 ์™„๋ฃŒ
์ž‘์—… 2 ์‹œ์ž‘
์ž‘์—… 2 ์™„๋ฃŒ
๋ชจ๋“  ์ž‘์—… ์™„๋ฃŒ

 

3. ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ

Future.wait๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

Future<void> task1() async {
  print("์ž‘์—… 1 ์‹œ์ž‘");
  await Future.delayed(Duration(seconds: 1));
  print("์ž‘์—… 1 ์™„๋ฃŒ");
}

Future<void> task2() async {
  print("์ž‘์—… 2 ์‹œ์ž‘");
  await Future.delayed(Duration(seconds: 2));
  print("์ž‘์—… 2 ์™„๋ฃŒ");
}

Future<void> main() async {
  await Future.wait([task1(), task2()]);
  print("๋ชจ๋“  ์ž‘์—… ์™„๋ฃŒ");
}

์ถœ๋ ฅ ๊ฒฐ๊ณผ

์ž‘์—… 1 ์‹œ์ž‘
์ž‘์—… 2 ์‹œ์ž‘
์ž‘์—… 1 ์™„๋ฃŒ
์ž‘์—… 2 ์™„๋ฃŒ
๋ชจ๋“  ์ž‘์—… ์™„๋ฃŒ

 

๋ฐ˜์‘ํ˜•