{"id":602,"date":"2020-07-06T09:00:48","date_gmt":"2020-07-06T00:00:48","guid":{"rendered":"http:\/\/mobilelab.khu.ac.kr\/?p=602"},"modified":"2020-04-05T19:02:19","modified_gmt":"2020-04-05T10:02:19","slug":"dart-programmer-25","status":"publish","type":"post","link":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/2020\/07\/06\/dart-programmer-25\/","title":{"rendered":"Dart Programmer \ub418\uae30 [25]"},"content":{"rendered":"\n<h4>&lt; Dart \uae30\ucd08\ubb38\ubc95 &#8211; Asynchrony Support &gt;<\/h4>\n\n\n\n<p>\ud504\ub85c\uadf8\ub7a8\uc774 \ub3d9\uc791\ud558\ub2e4 \ubcf4\uba74, \uc2dc\uac04\uc774 \ub9ce\uc774 \uc18c\uc694\ub418\ub294 \uc791\uc5c5\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ub300\ud45c\uc801\uc778 \uacbd\uc6b0\uac00, \ub300\ub7c9\uc758 \ub370\uc774\ud0c0\ub97c \uc77d\uace0 \ucc98\ub9ac\ud558\uac70\ub098, \uc544\ub2c8\uba74 \uc800\uc18d\uc758 \uc785\ucd9c\ub825 \uc7a5\uce58\ub97c \ub2e4\ub8e8\ub294 \uacbd\uc6b0\uc785\ub2c8\ub2e4. Dart \uc5b8\uc5b4\uc758 Async \uae30\ub2a5\uc740 \uc774\ub7f0 \uc2dc\uac04\uc774 \ub9ce\uc774 \uac78\ub9ac\ub294 \uc791\uc5c5\uc774 \uc644\ub8cc\ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \ubc14\ub85c \ub2e4\uc74c \ub3d9\uc791\uc744 \uc774\uc5b4 \ub098\uac08\uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uc774\ub7f0 \uae30\ub2a5\uc774 \ud3ec\ud568\ub41c \ud568\uc218\ub4e4\uc740 \ub9ac\ud134 \uac12\uc73c\ub85c Future \ud639\uc740 Stream \uac1d\uccb4\ub97c \ubc18\ud658 \ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc774\ub7f0 \uae30\ub2a5\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \ud558\ub294 \ubb38\ubc95\uc740 async\uc640 await \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<h4><em>async<\/em>, <em>wait <\/em>and <em>Future <\/em>Syntax<\/h4>\n\n\n\n<p>darttutorial-25-01.dart\uc5d0\uc11c heavyLoadFunction()\uc744 \ubcf4\uba74, \ubc18\ubcf5\ubb38\uc744 \uc218\ud589\ud558\uba74\uc11c \uc81c\ubc95 \ud070 \uc22b\uc790\uc5d0 \ub300\ud55c \ub367\uc148\uc744 \uc218\ud589\ud569\ub2c8\ub2e4. \ub9cc\uc57d \ud504\ub85c\uadf8\ub7a8\uc774 \ub367\uc148\uc744 \uc218\ud589\ud558\ub294 \uc2dc\uac04 \ub3d9\uc548 \ub2e4\ub978 \uc791\uc5c5\uc744 \ud560 \ud544\uc694\uac00 \uc5c6\ub2e4\uba74, \ub2e8\uc21c\ud788 \uae30\ub2e4\ub9ac\uba74 \ub429\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, \ub9cc\uc57d \ub367\uc148\uc744 \uc218\ud589\ud558\ub294 \ub3d9\uc548\uc5d0 \ub2e4\ub978 \uc791\uc5c5\uc744 \ub3d9\uc2dc\uc5d0 \uc9c4\ud589\ud558\ub294 \uac83\uc774 \ud6a8\uacfc\uc801\uc774\ub77c\uba74, \ub367\uc148\uc744 \uc218\ud589\ud558\ub294 \ub3d9\uc548\uc5d0 \ub2e4\ub978 \uc791\uc5c5\uc774 \ub3d9\uc2dc\uc5d0 \uc774\ub8e8\uc5b4 \uc9c0\ub3c4\ub85d \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c,  <br>heavyLoadFunction()\ub97c \ud638\ucd9c\ud558\ub294 \ubd80\ubd84\uc744 \ubcf4\uba74, takeTime() \uc548 \uc778 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370,  heavyLoadFunction()\ub97c \ud638\ucd9c\ud558\ub294 \uc55e\uc5d0 \uc0c8\ub85c\uc6b4 \ubb38\ubc95\uc774 \uc788\uc73c\ub2c8, await \uc785\ub2c8\ub2e4. \uc601\uc5b4 \uadf8\ub300\ub85c \ud574\uc11d\ud558\uba74 \uae30\ub2e4\ub9ac\ub77c\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \uc989, takeTime()\uc740 <br>heavyLoadFunction()\ub97c \uc2e4\ud589\ud558\ub418, \uc774 \ud568\uc218\uc758 \uc2e4\ud589\uc774 \uc2dc\uc791\ub418\uba74 (\uc774 \ud568\uc218\uac00 \uc644\ub8cc\ub418\uae30 \uc804\uc5d0) \uacb0\uacfc\uac00 \ub9ac\ud134\ub418\uae30\ub97c \uae30\ub2e4\ub9ac\uc9c0\ub9cc, takeTime()\uc744 \ud638\ucd9c\ud55c \ucabd\uc740 \uc774 \uacb0\uacfc\ub97c \uae30\ub2e4\ub9ac\uc9c0 \uc54a\uace0 \uc77c\ub2e8 \ub2e4\ub978 \uc791\uc5c5\uc744 \uc218\ud589\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uc774\ub7f0 \uc758\ubbf8\uc5d0\uc11c await \uad6c\ubb38\uc774 \ub4e4\uc5b4 \uc788\ub294 \ud568\uc218\uc758 \ub9ac\ud134 \uac12\uc740 Future\ub77c\ub294 \ud0c0\uc785\uc785\ub2c8\ub2e4. \uc774 \uc758\ubbf8\ub294 &#8220;\ubbf8\ub798\uc5d0 \uacb0\uacfc\uac00 \ub9ac\ud134\ub420\uac70\uc57c. \uae30\ub2e4\ub9ac\ub2e4\uac00 \uacb0\uacfc\uac00 \ub9cc\ub4e4\uc5b4 \uc9c0\uba74, \ubbf8\ub798\uc5d0 \uc54c\ub824\uc904\ud14c\ub2c8, \uc77c\ub2e8\uc740 \ub3d9\uc2dc\uc5d0 \ud574\uc57c\ud560 \uc77c\uc774 \uc788\uc73c\uba74 \uc218\ud589\ud558\ub294\uac8c \uc88b\uaca0\uc5b4&#8221;\ub77c\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \uc774\ub807\uac8c await \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubbf8\ub798\uc5d0 \uacb0\uacfc\ub97c \ub9ac\ud134\ud558\ub294 \ud568\uc218\ub294 async \ud568\uc218\ub77c\uace0 \ud558\uba70, async \uad6c\ubb38\uc744 \ud568\uc218 \uc774\ub984\uacfc { &#8230; } \uc0ac\uc774\uc5d0 \uae30\uc785\ud574\uc57c \ud569\ub2c8\ub2e4. \ud504\ub85c\uadf8\ub7a8 \uc18c\uc2a4\ucf54\ub4dc\ub97c \ubcf4\uba74, main()\ub3c4 async \ud568\uc218 \uc778 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. takeTime()\uacfc \ube44\uc2b7\ud55c \uad6c\uc870\ub85c\uc11c, takeTime()\uc744 await\ub85c \ud638\ucd9c\ud558\uace0, \uc774\uc758 \uacb0\uacfc\uac00 \uc624\uae30\ub97c \uae30\ub2e4\ub9ac\ub294 \uc791\uc5c5\uc744 \ud558\ub294 \ud615\ud0dc\uc778 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ darttutorial-25-01.dart\n\nheavyLoadFunction() {\n  print(\"[heavyLoadFunction(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 100000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction(): completed.\");\n  return sum;\n}\n\nFuture takeTime() async {\n  print(\"[takeTime(): started.\");\n  var status = await heavyLoadFunction();\n  print(\"[takeTime(): completed and result is $status.\");\n  return status;\n}\n\nFuture main() async {\n  print(\"[main(): started.\");\n  var status = await takeTime();\n  print(\"[main(): result is $status.\");\n}<\/code><\/pre>\n\n\n\n<p>darttutorial-25-01.dart \ud504\ub85c\uadf8\ub7a8\uc758 \uacb0\uacfc\uac00 \uc544\ub798\uc640 \uac19\uc774 \ub098\ud0c0\ub098 \uc788\uc2b5\ub2c8\ub2e4. \uc218\ud589 \uacb0\uacfc\ub97c \uc774\ud574\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. \uba3c\uc800, main()\uac00 \uc2e4\ud589\ud558\uba74\uc11c, takeTime()\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4. \ub2e8, \uacb0\uacfc\uac00 \ub9ac\ud134\ub420\ub54c\uae4c\uc9c4 \uae30\ub2e4\ub9ac\uaca0\ub2e4\ub294 \uc758\ubbf8\uc5d0\uc11c await \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, main()\uc758 \uc218\ud589\uc740 \uc77c\ub2e8 \uc774\uc9c0\uc810\uc5d0\uc11c \uba48\ucd94\uba70, \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589\uc740 takeTime()\ud568\uc218\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4. \uc21c\ucc28\uc801\uc73c\ub85c heavyLoadFunction()\uc774 \ud638\ucd9c\ub418\ub294 \uac83\uc744 \ubcfc\uc218 \uc788\uc73c\uba70, \ub9c8\ucc2c\uac00\uc9c0\ub85c await \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud569\ub2c8\ub2e4. \uc774 \ud568\uc218\uc758 \ub3d9\uc791\uc774 \uc885\ub8cc\ub418\uba74, await\uc5d0 \uc758\ud574\uc11c \uacb0\uacfc\ub97c \uae30\ub2e4\ub9ac\ub294 takeTime()\uc73c\ub85c \ubcf5\uadc0\ud558\uba70, \ub2e4\uc2dc \uc774 \ud568\uc218\uc758 \uacb0\uacfc\ub97c \uae30\ub2e4\ub9ac\ub358 main()\uc73c\ub85c \ub3cc\uc544\uc628 \ud6c4, \uac00\uc838\uc628 \uacb0\uacfc\ub97c \ud654\uba74\uc5d0 \ucd9c\ub825\ud558\uace0, \ud504\ub85c\uadf8\ub7a8\uc744 \uc885\ub8cc \ud558\uac8c \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[main(): started.\n[takeTime(): started.\n[heavyLoadFunction(): started.\n[heavyLoadFunction(): completed.\n[takeTime(): completed and result is 4999999950000000.\n[main(): result is 4999999950000000.<\/code><\/pre>\n\n\n\n<h4>Asynchronous Operation<\/h4>\n\n\n\n<p>Async \ub3d9\uc791\uc744 \uc124\uba85\ud558\uace0 \uc788\uc9c0\ub9cc, \uccab\ubc88\uca30\ub85c \uc124\uba85\ud55c darttutorial-25-01.dart \ud504\ub85c\uadf8\ub7a8\uc740 main() &#8211; takeTime() &#8211; heavyLoadFunction()\uc774 \uaf2c\ub9ac\uc5d0 \uaf2c\ub9ac\ub97c \ubb3c\uba74\uc11c \uacb0\uacfc\ub97c \uae30\ub2e4\ub9ac\uae30\uc5d0 \uc0ac\uc2e4\uc0c1 async \ub3d9\uc791\uc774\uae30 \ubcf4\ub2e4\ub294 sync \ub3d9\uc791\uc778 \ub3d9\uae30\ud654\ub41c \ubc29\ubc95\uc774\ub77c\uace0 \ubcfc\uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d main()\uc5d0\uc11c \uad73\uc774 takeTime()\uc758 \uacb0\uacfc\ub97c \ucde8\ud558\uc9c0 \uc54a\ub294 \ub2e4\uba74 \uc5b4\ub5a8\uae4c\uc694? takeTime()\uc774 \uc54c\uc544\uc11c \uc791\uc5c5\uc744 \ud558\uace0, \ub3c5\uc790\uc801\uc73c\ub85c \ub3d9\uc791\ud558\ub418, takeTime()\uc774 \ub3c5\ub9bd\uc801\uc778 \uc791\uc5c5\uc744 \ud558\ub294 \ub3d9\uc548 main()\uc740 \ub2e4\ub978 \ub3d9\uc791\uc744 \ub3d9\uc2dc\uc5d0 \ud55c\ub2e4\uace0 \uc0dd\uac01\ud574 \ubd05\ub2c8\ub2e4. \uc774\ub807\uac8c \uc218\uc815\ud55c \ud504\ub85c\uadf8\ub7a8\uc774 darttutorial-25-02.dart \uc785\ub2c8\ub2e4. \ubcc0\uacbd\ub41c \ubd80\ubd84\uc740 main() \ubfd0\uc785\ub2c8\ub2e4. \uc55e\uc11c darttutorial-25-01.dart\uc5d0\uc11c\ub294 main()\uc774 takeTime()\uc5d0\uc11c \uacb0\uacfc\ub97c \ub9ac\ud134\ud560\ub54c\uae4c\uc9c0 \ub300\uae30\ub97c \ud588\uc9c0\ub9cc, \uc9c0\uae08\uc740 takeTime() \ud568\uc218\ub97c \ud638\ucd9c\ud560 \ubfd0, await\ub85c \ub300\uae30 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c, main()\uc740 takeTime()\uc744 \ud638\ucd9c\ud574\uc11c heavyLoadFunction()\uc744 \ud1b5\ud55c \uae34 \uc791\uc5c5\uc744 \uc2dc\uc791\ud558\uc9c0\ub9cc, \uc774\uc640 \ud568\uaed8 main()\uc5d0\uc11c\ub3c4 \ub2e4\ub978 \uc791\uc5c5\uc744 \ub3d9\uc2dc\uc5d0 \uc218\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \uc791\uc5c5\uc744 \uc774\uc5b4 \uac11\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ darttutorial-25-02.dart\n\nheavyLoadFunction() {\n  print(\"[heavyLoadFunction(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 100000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction(): completed.\");\n  return sum;\n}\n\nFuture takeTime() async {\n  print(\"[takeTime(): started.\");\n  var status = await heavyLoadFunction();\n  print(\"[takeTime(): completed and result is $status.\");\n  return status;\n}\n\nmain() {\n  print(\"[main(): started.\");\n  var status = takeTime();\n  print(\"[main(): result is $status.\");\n}<\/code><\/pre>\n\n\n\n<p>darttutorial-25-02.dart \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589\uacb0\uacfc\uac00 \uc544\ub798\uc640 \uac19\uc774 \ub098\ud0c0\ub098 \uc788\uc2b5\ub2c8\ub2e4. \ub2ec\ub77c\uc9c4 \ubd80\ubd84\uc740, takeTime()\uc774 \uc885\ub8cc\ub418\uae30\uc804\uc5d0, main()\uc73c\ub85c \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589\uc774 \uc774\uc5b4\uc9c0\uba74\uc11c, takeTime()\uc758 \ub9ac\ud134 \uac12\uc774 Future \ud0c0\uc785\uc778 \uc810\uc785\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ub098\uc11c, \uc2dc\uac04\uc774 \ud750\ub978\ud6c4 takeTime() \ud568\uc218\uac00 \uc885\ub8cc\ub418\ub294 \uac83\uc744 \ubcfc\uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc640 \uac19\uc774, main()\uc774 \uc2dc\uc791\ud558\uba74, \ub3c5\ub9bd\uc801\uc778 \ud504\ub85c\uc138\uc2a4\/\ud568\uc218(\ub4e4)\uc758 \ub3d9\uc791\uc744 \uc2dc\uc791\uc2dc\ud0a4\uace0, \uc11c\ub85c\uac00 \ub3c5\ub9bd\uc801\uc774\uba70 \ubcd1\ub82c\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uac8c \ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[main(): started.\n[takeTime(): started.\n[heavyLoadFunction(): started.\n[heavyLoadFunction(): completed.\n[main(): result is Instance of 'Future&lt;dynamic>'.\n[takeTime(): completed and result is 4999999950000000.<\/code><\/pre>\n\n\n\n<h4>Multiple <em>await <\/em>Operation<\/h4>\n\n\n\n<p>async \ud568\uc218 \uc548\uc5d0 await \uad6c\ubb38\uc744 \ud558\ub098\ub9cc \uc0ac\uc6a9\ud558\uc600\uc9c0\ub9cc, darttutorial-25-03.dart \ud504\ub85c\uadf8\ub7a8 \ucc98\ub7fc, \ubcf5\uc218\uc758 await \uad6c\ubb38\uc758 \uc0ac\uc6a9\ub3c4 \uac00\ub2a5\ud569\ub2c8\ub2e4. takeTime() \ud568\uc218\uc5d0 \uc5f0\uc774\uc5b4 await \uad6c\ubb38\uc774 \ub450\uac1c \ub098\ud0c0\ub098 \uc788\uc73c\uba70, \uccab\ubc88\uc9f8 await \uad6c\ubb38\uc758 \uc644\ub8cc\ud6c4, \uc774\uc5b4\uc11c \ub450\ubc88\uc9f8 await \uad6c\ubb38\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ darttutorial-25-03.dart\n\nheavyLoadFunction1() {\n  print(\"[heavyLoadFunction1(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 100000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction1(): completed.\");\n  return sum;\n}\n\nheavyLoadFunction2() {\n  print(\"[heavyLoadFunction2(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 1000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction2(): completed.\");\n  return sum;\n}\n\nFuture takeTime() async {\n  print(\"[takeTime(): started.\");\n  var status1 = await heavyLoadFunction1();\n  var status2 = await heavyLoadFunction2();\n  print(\"[takeTime(): completed and result is $status1 $status2.\");\n  return status1 + status2;\n}\n\nFuture main() async {\n  print(\"[main(): started.\");\n  var status = await takeTime();\n  print(\"[main(): result is $status.\");\n}<\/code><\/pre>\n\n\n\n<p>darttutorial-25-03.dart \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589\uacb0\uacfc\uac00 \uc544\ub798\uc5d0 \ub098\ud0c0\ub098 \uc788\uc2b5\ub2c8\ub2e4. main()\uc740 darttutorial-25-01.dart \ucc98\ub7fc async \uacb0\uacfc\ub97c \uae30\ub2e4\ub9ac\ub294 \uad6c\uc870\ub85c \ub418\uc5b4 \uc788\uae30\uc5d0, Future \ud0c0\uc785\uc774 \uc544\ub2cc, \uc81c\ub300\ub85c\ub41c \uacb0\uacfc\ub97c \ucd9c\ub825\ud558\ub294 \uac83\uc744 \ubcfc\uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c, takeTime() \ud568\uc218\ub97c \ud1b5\ud574\uc11c heavyLoadFunction1()\uacfc heavyLoadFunction2()\uac00 \uc5f0\uc774\uc5b4 \uc218\ud589\ub418\ub294 \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[main(): started.\n[takeTime(): started.\n[heavyLoadFunction1(): started.\n[heavyLoadFunction1(): completed.\n[heavyLoadFunction2(): started.\n[heavyLoadFunction2(): completed.\n[takeTime(): completed and result is 4999999950000000 499999500000.\n[main(): result is 5000499949500000.<\/code><\/pre>\n\n\n\n<h4>Simultaneous Asynchronous Operations<\/h4>\n\n\n\n<p>\uc774\uc81c \uc81c\ub300\ub85c main()\uc5d0\uc11c \ubcf5\uc218\uc758 \uc791\uc5c5\uc744 \ub3d9\uc2dc\uc5d0 \uc218\ud589\uc2dc\ud0a4\ub294 \ubc29\uc2dd\uc73c\ub85c \ud504\ub85c\uadf8\ub7a8\uc744 \uc218\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. darttutorial-25-04.dart \ud504\ub85c\uadf8\ub7a8\uc744 \ubcf4\uba74, \ub450\uac1c\uc758 takeTimeA()\uc640 takeTimeB()\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uac01\uac01\uc740 \uc55e\uc11c\uc640 \uc720\uc0ac\ud558\uac8c \ub9ce\uc740 \uacc4\uc2fc\uc744 \ud558\ub294 \ud568\uc218\ub4e4\uc744 \uc21c\ucc28\uc801\uc73c\ub85c \uc218\ud589\ud569\ub2c8\ub2e4. \ud558\uace0\uc790 \ud558\ub294 \uac83\uc740 takeTimeA()\uc640 takeTimeB()\uac00 \ub3c5\ub9bd\uc801\uc73c\ub85c \ub3d9\uc2dc\uc5d0 \ub3d9\uc791\ud558\ub294 \uac83\uc774\uba70, \uc774\uc5b4\uc11c \uc124\uba85\ud560 \uc218\ud589 \uacb0\uacfc\ub97c \ubcf4\uba74, async \ud568\uc218\uac00 \uc544\ub2cc main()\uc744 \ud1b5\ud574\uc11c \uac01\uac01\uc744 \ud638\ucd9c\ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ darttutorial-25-04.dart\n\nheavyLoadFunction1() {\n  print(\"[heavyLoadFunction1(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 100000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction1(): completed.\");\n  return sum;\n}\n\nheavyLoadFunction2() {\n  print(\"[heavyLoadFunction2(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 1000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction2(): completed.\");\n  return sum;\n}\n\nheavyLoadFunction3() {\n  print(\"[heavyLoadFunction3(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 10000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction3(): completed.\");\n  return sum;\n}\n\nheavyLoadFunction4() {\n  print(\"[heavyLoadFunction4(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 100000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction4(): completed.\");\n  return sum;\n}\n\nFuture takeTimeA() async {\n  print(\"[takeTimeA(): started.\");\n  var status1 = await heavyLoadFunction1();\n  var status2 = await heavyLoadFunction2();\n  print(\"[takeTimeA(): completed and result is $status1 $status2.\");\n}\n\nFuture takeTimeB() async {\n  print(\"[takeTimeB(): started.\");\n  var status1 = await heavyLoadFunction3();\n  var status2 = await heavyLoadFunction4();\n  print(\"[takeTimeB(): completed and result is $status1 $status2.\");\n}\n\nmain() {\n  print(\"[main(): started.\");\n  takeTimeA();\n  takeTimeB();\n  print(\"[main(): completed.\");\n}<\/code><\/pre>\n\n\n\n<p>darttutorial-25-04.dart\uc758 \uc218\ud589\uacb0\uacfc\uac00 \uc544\ub798\uc640 \uac19\uc774 \ub098\ud0c0\ub0a9\ub2c8\ub2e4. main()\uc758 \uc2dc\uc791\uacfc \ud568\uaed8 takeTimeA()\ub97c \uc2e4\ud589\ud558\uc600\ub294\ub370, \uc774\ub97c \ud1b5\ud55c heavyLoadFunction1()\uacfc heavyLoadFunction2()\uac00 \ubaa8\ub450 \ub9c8\uccd0\uc9c0\uae30 \uc804\uc5d0, takeTimeB()\ub3c4 \uc2dc\uc791\uc744 \ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c, \ub2f9\ubd84\uac04 takeTimeA()\uc640 takeTimeB()\uac00 \ub3d9\uc2dc\uc5d0 \ub3d9\uc791\ud558\ub294 \uc2dc\uac04\uc774 \uc874\uc7ac\ud568\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub354\ubd88\uc5b4, main()\uc774 async \ud568\uc218\uac00 \uc544\ub2c8\uae30\uc5d0 \ub9c8\uc9c0\ub9c9 \uad6c\ubb38\uc744 \uc2e4\ud589\ud574 \ubc84\ub9ac\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ud6c4 \ub3d9\uc2dc\uc5d0 \uc218\ud589 \uc911\uc778 \uc791\uc5c5\ub4e4\uc774 \uac01\uac01 \ub9c8\uccd0\uc9c0\uace0, \uacc4\uc0b0\ud55c \uac01\uc790\uc758 \uacb0\uacfc\ub97c \ud654\uba74\uc5d0 \ucd9c\ub825\ud6c4 \ud504\ub85c\uadf8\ub7a8\uc744 \uc885\ub8cc\ud558\ub294 \uac83\uc744 \ubcfc\uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[main(): started.\n[takeTimeA(): started.\n[heavyLoadFunction1(): started.\n[heavyLoadFunction1(): completed.\n[takeTimeB(): started.\n[heavyLoadFunction3(): started.\n[heavyLoadFunction3(): completed.\n[main(): completed.\n[heavyLoadFunction2(): started.\n[heavyLoadFunction2(): completed.\n[heavyLoadFunction4(): started.\n[heavyLoadFunction4(): completed.\n[takeTimeA(): completed and result is 4999999950000000 499999500000.\n[takeTimeB(): completed and result is 49999995000000 4999950000.<\/code><\/pre>\n\n\n\n<h4>Synchronous Operations using <em>await <\/em>Syntax<\/h4>\n\n\n\n<p>darttutorial-25-05.dart \ud504\ub85c\uadf8\ub7a8\uc740 \ub2e4\uc2dc main()\uc5d0 await \uad6c\ubb38\uc744 \uc0bd\uc785\ud568\uc73c\ub85c, takeTimeA()\uc640 takeTimeB()\uc758 \uc791\uc5c5\uc744 \ub9c8\uccd0\uc57c\uc9c0 main()\uc744 \uc885\ub8cc\ud558\ub3c4\ub85d \uc870\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4.  \uc774\ub807\uac8c \ud568\uc73c\ub85c\uc368, \ub3c5\ub9bd\uc801\uc73c\ub85c \ub3d9\uc2dc\uc5d0 \uc218\ud589\ub418\uc9c0 \uc54a\uace0, \uc21c\ucc28\uc801\uc73c\ub85c \uc218\ud589\ud558\ub3c4\ub85d \ubcc0\uacbd\ud55c \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ darttutorial-25-05.dart\n\nheavyLoadFunction1() {\n  print(\"[heavyLoadFunction1(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 100000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction1(): completed.\");\n  return sum;\n}\n\nheavyLoadFunction2() {\n  print(\"[heavyLoadFunction2(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 1000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction2(): completed.\");\n  return sum;\n}\n\nheavyLoadFunction3() {\n  print(\"[heavyLoadFunction3(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 10000000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction3(): completed.\");\n  return sum;\n}\n\nheavyLoadFunction4() {\n  print(\"[heavyLoadFunction4(): started.\");\n  var sum = 0;\n  for(var tmp = 0; tmp &lt; 100000; tmp++) {\n    sum += tmp;\n  }\n  print(\"[heavyLoadFunction4(): completed.\");\n  return sum;\n}\n\nFuture takeTimeA() async {\n  print(\"[takeTimeA(): started.\");\n  var status1 = await heavyLoadFunction1();\n  var status2 = await heavyLoadFunction2();\n  print(\"[takeTimeA(): completed and result is $status1 $status2.\");\n}\n\nFuture takeTimeB() async {\n  print(\"[takeTimeB(): started.\");\n  var status1 = await heavyLoadFunction3();\n  var status2 = await heavyLoadFunction4();\n  print(\"[takeTimeB(): completed and result is $status1 $status2.\");\n}\n\nFuture main() async {\n  print(\"[main(): started.\");\n  await takeTimeA();\n  await takeTimeB();\n  print(\"[main(): completed.\");\n}<\/code><\/pre>\n\n\n\n<p>\uc218\ud589 \uacb0\uacfc\uac00 \uc544\ub798\uc640 \uac19\uc774 \ub098\ud0c0\ub098 \uc788\uc73c\uba70, \ud55c\ubc88\uc5d0 \ud558\ub098\uc758 \uae30\ub2a5 \ub9cc\uc744 \uc218\ud589\ud558\uba74\uc11c, \ud504\ub85c\uadf8\ub7a8\uc774 \ubb3c \ud750\ub974\ub4ef\uc774 \uc9c4\ud589\ub418\uc5b4 \uc885\ub8cc\ub418\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[main(): started.\n[takeTimeA(): started.\n[heavyLoadFunction1(): started.\n[heavyLoadFunction1(): completed.\n[heavyLoadFunction2(): started.\n[heavyLoadFunction2(): completed.\n[takeTimeA(): completed and result is 4999999950000000 499999500000.\n[takeTimeB(): started.\n[heavyLoadFunction3(): started.\n[heavyLoadFunction3(): completed.\n[heavyLoadFunction4(): started.\n[heavyLoadFunction4(): completed.\n[takeTimeB(): completed and result is 49999995000000 4999950000.\n[main(): completed.<\/code><\/pre>\n\n\n\n<h4>\ub9c8\ubb34\ub9ac<\/h4>\n\n\n\n<p>Dart \uc5b8\uc5b4\ub294 await, async, Future \ubb38\ubc95\uc744 \uc0ac\uc6a9\ud568\uc73c\ub85c\uc368, \uc9c0\uc5f0\uc774 \ubc1c\uc0dd\ud558\ub294 \uc791\uc5c5\uc774 \uc788\ub294 \uacbd\uc6b0, \uc774\uc758 \uc218\ud589\uc744 \uc9c4\ud589\ud558\uba74\uc11c, \uc774\uc5d0 \ub3c5\ub9bd\uc801 \uc77c\uc218 \uc788\ub294 \ub2e4\ub978 \uc791\uc5c5\uc758 \uc218\ud589\uc744 \uc774\uc5b4\uac00\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4. \uc608\uc81c\uc5d0\uc11c \uc0b4\ud3b4\ubcf4\uc9c0\ub294 \uc54a\uc558\uc9c0\ub9cc, async \ud568\uc218\uc548\uc5d0\uc11c \uc785\ucd9c\ub825\uacfc \uad00\ub828\ud55c \ubc18\ubcf5\uc801\uc778 \uc791\uc5c5\uc774 \ud544\uc694\ud55c \uacbd\uc6b0\ub294 async for \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \ud544\uc694\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucd94\ud6c4 async \uae30\ub2a5\uc758 \uac1c\ubc1c\uc5d0\uc11c \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\ub294 \uacbd\uc6b0\uc5d0\ub294 \ud574\ub2f9 \ubb38\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/01\/b05-1.jpg\" alt=\"\" class=\"wp-image-267\" width=\"137\" height=\"49\"\/><\/figure><\/div>\n\n\n\n<p><strong>Creative Commons License<\/strong> (<strong>CC BY-NC-ND<\/strong>)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&lt; Dart \uae30\ucd08\ubb38\ubc95 &#8211; Asynchrony Support &gt; \ud504\ub85c\uadf8\ub7a8\uc774 \ub3d9\uc791\ud558\ub2e4 \ubcf4\uba74, \uc2dc\uac04\uc774 \ub9ce\uc774 \uc18c\uc694\ub418\ub294 \uc791\uc5c5\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ub300\ud45c\uc801\uc778 \uacbd\uc6b0\uac00, \ub300\ub7c9\uc758 \ub370\uc774\ud0c0\ub97c \uc77d\uace0 \ucc98\ub9ac\ud558\uac70\ub098, \uc544\ub2c8\uba74 \uc800\uc18d\uc758 \uc785\ucd9c\ub825 \uc7a5\uce58\ub97c \ub2e4\ub8e8\ub294 \uacbd\uc6b0\uc785\ub2c8\ub2e4. Dart \uc5b8\uc5b4\uc758 Async &#8230;<\/p>\n","protected":false},"author":1,"featured_media":975,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[3],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts\/602"}],"collection":[{"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/comments?post=602"}],"version-history":[{"count":6,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts\/602\/revisions"}],"predecessor-version":[{"id":613,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts\/602\/revisions\/613"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/media\/975"}],"wp:attachment":[{"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=602"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}