{"id":622,"date":"2020-07-13T21:00:08","date_gmt":"2020-07-13T12:00:08","guid":{"rendered":"http:\/\/mobilelab.khu.ac.kr\/?p=622"},"modified":"2020-04-05T19:02:49","modified_gmt":"2020-04-05T10:02:49","slug":"be-dart-programmer-26","status":"publish","type":"post","link":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/2020\/07\/13\/be-dart-programmer-26\/","title":{"rendered":"Dart Programmer \ub418\uae30 [26]"},"content":{"rendered":"\n<h4>&lt; Dart \uae30\ucd08\ubb38\ubc95 &#8211; Library and File\/Stream\/Process  &gt;<\/h4>\n\n\n\n<p>Library\ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \ub3c4\uc11c\uad00\uc774\ub77c\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \ub300\uc2e0 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc5d0\uc11c\uc758 \ub3c4\uc11c\uad00\uc774\ub780, \ucc45\uc774 \uc544\ub2cc \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ucf54\ub4dc\ub4e4\uc774 \uc788\ub294 \uac83\uc774\uc9c0\uc694. \uc2e4\uc81c\ub85c \ubb3c\ub9ac\uc801\uc73c\ub85c \uc5b4\ub518\uac00\ub97c \uac04\ub2e4\ub294 \uc758\ubbf8\uac00 \uc544\ub2c8\uace0, 1) \ub0b4\uac00 \ub9cc\ub4e0 \uba4b\uc9c4 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ucf54\ub4dc\ub97c \ub450\uace0 \ub450\uace0 \uc7ac\ud65c\uc6a9(!)\ud558\uae30 \uc704\ud568 2) \ub0a8\uc774 \ub9cc\ub4e0 \uac80\uc99d\ub41c \ucf54\ub4dc\ub97c \uc7ac\ud65c\uc6a9(!)\ud558\uc5ec \uac1c\ubc1c \uae30\uac04\uc758 \ub2e8\ucd95\uacfc \uc870\uae30 \uc548\uc815\uc131 \ud655\ubcf4\ub97c \ub3c4\ubaa8\ud568 \uc774\ub77c \uc0dd\uac01\ud558\uba74 \ub429\ub2c8\ub2e4. Library\ub294 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc5d0\uc11c \uae30\ubcf8\uc801\uc73c\ub85c \uc81c\uacf5\ud558\ub294 built-in library\uc640 \uc81c3\uc790(\uac1c\ubc1c\uc790 \ubcf8\uc778 \ud3ec\ud568)\uac00 \ub9cc\ub4e4\uc5c8\uae30\uc5d0, \ubcc4\ub3c4\ub85c \uc124\uce58\ud574\uc57c \ud558\ub294 3rd-party library\ub85c \ub098\ub269\ub2c8\ub2e4. \ubcf8 \uae00\uc5d0\uc11c\ub294 \uc804\uc790\uc778 Dart \uc5b8\uc5b4\uc758 built-in library\ub97c \uc911\uc2ec\uc73c\ub85c \ud558\uba70, \uc774 \ud29c\ud1a0\ub9ac\uc5bc\uc758 \ud750\ub984\uc5d0\uc11c \uc54c\uc544\uc57c \ud558\ub294 \ubd80\ubd84\uc744 \uc911\uc2ec\uc73c\ub85c \uc124\uba85\ud569\ub2c8\ub2e4. <\/p>\n\n\n\n<h4>Built-in Library in Dart<\/h4>\n\n\n\n<p>dart:core\ub294 \uac00\uc7a5 \uae30\ubcf8\uc801\uc778 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\uba70, \uac1c\ubc1c\uc790\uac00 \uc544\ubb34\ub7f0 \uc791\uc5c5\uc744 \ubcc4\ub3c4\ub85c \ud558\uc9c0 \uc54a\uc544\ub3c4, \uac1c\ubc1c\ud558\ub294 \ud504\ub85c\uadf8\ub7a8\uc5d0 \uc790\ub3d9\uc73c\ub85c \ud3ec\ud568\ub429\ub2c8\ub2e4. \uc9c0\uae08\uae4c\uc9c0\uc758 \uae00\uc5d0\uc11c \uc81c\uacf5\ub418\ub294 built-in \ub370\uc774\ud130 \ud0c0\uc785 \ub4e4\uc5d0 \ub300\ud55c \uc0ac\ud56d\uc744 \ud3ec\ud568\ud558\uc5ec \uac00\uc7a5 \uae30\ucd08\uac00 \ub418\ub294 \uae30\ub2a5\ub4e4\ub85c \uc774\ub8e8\uc5b4 \uc9d1\ub2c8\ub2e4.<\/p>\n\n\n\n<p>dart:async\ub294 \uc55e\uc11c async \ud30c\ud2b8\uc5d0\uc11c \ud655\uc778\ud55c \ube44\ub3d9\uae30\uc801 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 library \uc785\ub2c8\ub2e4. Dart 2.1 \ubc84\uc804 \ubd80\ud130 \uac1c\ubc1c\uc790\uac00 \ubcc4\ub3c4\ub85c \uc791\uc5c5\uc744 \ud558\uc9c0 \uc54a\uc544\ub3c4, dart:core\ub97c \ud1b5\ud574\uc11c \uac1c\ubc1c\ud558\ub294 \ud504\ub85c\uadf8\ub7a8 \ub0b4\ubd80\uc5d0 \ud3ec\ud568\uc774 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p>dart:math\ub294 \ucd5c\ub300\uac12, \ucd5c\uc18c\uac12\uacfc \uac19\uc774 \uac00\uc7a5 \uae30\ubcf8\uc774 \ub418\ub294 \uc218\ud559\uc801\uc778 \uae30\ub2a5\ub4e4\uc744 \ud3ec\ud568\ud558\uc5ec, \ub09c\uc218\ubc1c\uc0dd(random number generation)\uacfc \uac19\uc740 \ubcf5\uc7a1\ud55c \uae30\ub2a5\uae4c\uc9c0\ub97c \uc81c\uacf5\ud558\ub294 library \uc785\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0\uc790 \ud55c\ub2e4\uba74, \uac1c\ubc1c\ud558\ub294 \ud504\ub85c\uadf8\ub7a8\uc758 \uc2dc\uc791\ubd80\ubd84\uc5d0 <em>import &#8220;dart:math&#8221;;<\/em>\ub97c \uc785\ub825\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p>dart:convert\ub294 \uae00\uc790\uc640 \uc22b\uc790\uc5d0 \ub300\ud55c \ucf54\ub529\uc744 \ub2f4\ub2f9\ud558\ub294 library \uc785\ub2c8\ub2e4. \uc55e \ubd80\ubd84\uc758 \uae00\uc5d0\uc11c \uc5b8\uae09\ub41c \uc801\uc774 \uc788\ub294 Unicode\uc640 UTF, \uadf8\ub9ac\uace0 JSON \ub4f1\uc758 \ub370\uc774\ud0c0 \ud45c\ud604 \ubc29\uc2dd\uc5d0 \ub300\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0\uc790 \ud55c\ub2e4\uba74, \uac1c\ubc1c\ud558\ub294 \ud504\ub85c\uadf8\ub7a8\uc758 \uc2dc\uc791\ubd80\ubd84\uc5d0 <em>import &#8220;dart:convert&#8221;;<\/em>\ub97c \uc785\ub825\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub2e4\uc74c\uc73c\ub85c \uc124\uba85\ud560 dart:html \ubc0f dart:io\ub97c \uc124\uba85\ud558\uae30 \uc804\uc5d0 \uc54c\uc544\uc57c \ud560 \ubd80\ubd84\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc544\ub798\uc758 \uadf8\ub9bc\uc744 \ubcf4\uba74\uc11c \uc774\ud574\ud574 \ubd05\ub2c8\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" loading=\"lazy\" width=\"564\" height=\"288\" src=\"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u110c\u1165\u11ab-11.41.29.png\" alt=\"\" class=\"wp-image-627\" srcset=\"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u110c\u1165\u11ab-11.41.29.png 564w, http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u110c\u1165\u11ab-11.41.29-300x153.png 300w, http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u110c\u1165\u11ab-11.41.29-480x245.png 480w\" sizes=\"(max-width: 564px) 100vw, 564px\" \/><figcaption>[\uadf8\ub9bc 1] Dart \uc5b8\uc5b4 \uc9c0\uc6d0 \ud50c\ub7ab\ud3fc \ubc0f \uac1c\ubc1c \ubc29\ubc95 (\ucd9c\ucc98: https:\/\/dart.dev\/platforms)<\/figcaption><\/figure><\/div>\n\n\n\n<p>dart:io\ub294 \uac1c\ubc1c\ud55c \ud504\ub85c\uadf8\ub7a8\uc774 \uc2a4\ub9c8\ud2b8\ud3f0\uacfc \uac19\uc740 \ubaa8\ubc14\uc77c\uc571, \ub370\uc2a4\ud06c\ud0d1 \ucef4\ud4e8\ud130, \uadf8\ub9ac\uace0 \uc11c\ubc84 \ud504\ub85c\uadf8\ub7a8\uc744 \uac1c\ubc1c\ud558\uace0\uc790 \ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 library\uc774\uba70, \uc774\ub294 Native \uc601\uc5ed \uc774\ub77c\uace0 \ud569\ub2c8\ub2e4. \uc989, Dart Native \ub77c\uace0 \ud558\uba70, ARM\/x86 CPU \uc704\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \ud504\ub85c\uadf8\ub7a8\uc744 \uac1c\ubc1c\ud558\ub294 \uac83 \uc785\ub2c8\ub2e4. \uc774\ub7f0 \uacbd\uc6b0\uc5d0 \uc0ac\uc6a9\ud558\ub294 library\uac00 dart:io \uc785\ub2c8\ub2e4. Dart I\/O\ub294 Dart VM(Virtual Machine), Flutter Apps, Server, Command-line Script \ub4f1\uc744 \uc704\ud574\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c \ucca8\uc5b8\ud558\uba74, Flutter\uc5d0\uc11c\ub294 dart:io \ub300\uc2e0 Flutter-specific\ud55c API \ub4e4\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \uad8c\uc7a5\ud558\uace0 \uc788\ub294\uc810 \ucc38\uc870\ud558\uae30 \ubc14\ub78d\ub2c8\ub2e4. \ucc38\uc870\ub85c \uadf8\ub9bc\uc5d0\uc11c <em>Develop<\/em>\ub294 \uac1c\ubc1c\ud558\ub294 \uc2dc\uc810\uc744 \uc758\ubbf8\ud558\uba70, <em>Deploy<\/em>\ub294 \uc2e4\uc81c \uc6b4\uc601\ud558\ub294 \uc2dc\uc810\uc744 \uc758\ubbf8 \ud569\ub2c8\ub2e4. \uadf8\ub9bc\uc548\uc5d0 \ub4f1\uc7a5 \ud558\ub294 \ub2e8\uc5b4\ub4e4\uc5d0 \ub300\ud574\uc11c\ub294 \ud5a5\ud6c4 \uc124\uba85\ud560 \uc2dc\uac04\uc774 \uc788\uc744 \uc608\uc815 \uc774\ubbc0\ub85c, \uc9c0\uae08\uc740 \uc124\uba85\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>dart:html\uc740 \uc6f9\ube0c\ub77c\uc6b0\uc800 \uae30\ubc18\uc758 \uc11c\ube44\uc2a4\ub97c \ub9cc\ub4e4\ub54c \uc0ac\uc6a9\ud558\uc5ec \uc6f9\uc758 DOM(Document Object Model)\uc744 \uc81c\uc5b4\ud558\uae30 \uc704\ud55c \uc6a9\ub3c4\uc785\ub2c8\ub2e4. Dart\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc6f9 \uc0c1\uc5d0\uc11c \ub3d9\uc791\ud560\ub54c JavaScript\ub85c \ubcc0\ud658\ud558\uc5ec \ub3d9\uc791\ud558\uac8c \ub429\ub2c8\ub2e4. Dart\uac00 \uc81c\uacf5\ud558\ub294 dart:html \uc678\uc5d0\ub3c4, Flutter framework\ub294 \uc774\ub7f0 \uc6f9 \uc11c\ube44\uc2a4\/\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc81c\uacf5\ud558\uba70, AngularDart\uc758 \uacbd\uc6b0\ub3c4 \uc6f9 \uae30\ubc18\uc758 \uc11c\ube44\uc2a4\/\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 Dart \uc5b8\uc5b4\ub85c \uac1c\ubc1c\ud560\ub54c \ud65c\uc131\ud654 \ub418\uace0 \uc788\ub294 \ub3c4\uad6c\uc774\ub2c8 \ucc38\uc870\ud558\uc2ed\uc2dc\uc624.<\/p>\n\n\n\n<h4>Useful Sites for Dart Libraries<\/h4>\n\n\n\n<p>Dart \uc5b8\uc5b4\uc758 library \ub4e4\uc5d0 \ub300\ud55c \uc124\uba85\uc774 \ud544\uc694\ud558\ub2e4\uba74, \ub2e4\uc74c\uc758 \uc0ac\uc774\ud2b8 \ub4e4\uc774 \uc5b4\ub290 \uc815\ub3c4 \uc774\ud574\ub97c \ub3c4\uc6b8 \uc218 \uc788\uc744 \uac83\uc73c\ub85c \uc0dd\uac01\ub418\ub2c8, \ucc38\uc870\ud569\ub2c8\ub2e4. \ud2b9\ud788 dart:core, dart:math, dart:async, dart:html\uc758 \uacbd\uc6b0\ub294 \uc544\ub798\uc758 \uccab\ubc88\uc9f8 \uc0ac\uc774\ud2b8\uc778 &#8216;<em>A tour of the core libraries<\/em>&#8216;\ub97c \ud55c\ubc88 \uc815\ub3c5\ud558\uae30 \ubc14\ub78d\ub2c8\ub2e4. \uc9c0\uae08\uae4c\uc9c0\uc758 \uae00\uc744 \ud1b5\ud574\uc11c \uc0b4\ud3b4\uc628 \ub0b4\uc6a9\uc744 library\ub77c\ub294 \uc785\uc7a5\uc5d0\uc11c \ub2e4\uc2dc \ud55c\ubc88 \uc815\ub9ac\ud558\ub294 \uacc4\uae30\uac00 \ub420 \uac83 \uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<ul><li><a href=\"https:\/\/dart.dev\/guides\/libraries\/library-tour\">A tour of the core libraries<\/a><\/li><li><a href=\"https:\/\/api.dart.dev\/stable\/2.7.1\/index.html\">Dart API reference documentation<\/a><\/li><li><a href=\"https:\/\/pub.dev\/\">Dart pub.dev<\/a><\/li><li><a href=\"https:\/\/dart.dev\/web\/libraries\">Dart Web libraries and packages<\/a><\/li><li><a href=\"https:\/\/api.flutter.dev\/\">Flutter API reference documentation<\/a><\/li><\/ul>\n\n\n\n<h4>Understanding Standalone Dart VM Operation<\/h4>\n\n\n\n<p>Dart \uc5b8\uc5b4\ub97c \uae30\ubcf8\uc801\uc73c\ub85c single-threaded \ubc29\uc2dd\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4. \uc27d\uac8c \uc774\uc57c\uae30 \ud558\uba74, Dart \uc5b8\uc5b4\ub85c \ub9cc\ub4e0 \ud504\ub85c\uadf8\ub7a8\uc740 \uc77c\uafbc\uc774 \ud558\ub098\ub77c\uace0 \ubcf4\uba74 \ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \ucc98\ub9ac\ud560 \uc77c\uc774 \uc5ec\ub7ff \uc774\uba74, \ud55c\uba85\uc758 \uc77c\uafbc\uc774 \uc77c\uc744 \ud558\ub098\uc529 \ud558\ub098\uc529 \ub9c8\uccd0\uc57c \ud55c\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \uc774\ub807\uac8c \ub418\uba74, \uc9c0\uc5f0\uc774 \uc0c1\ub2f9\ud788 \ubc1c\uc0dd\ud560 \uc6b0\ub824\uac00 \uc788\ub294 \uc785\ucd9c\ub825 \uae30\ub2a5\uc744 \ud544\uc5f0\uc801\uc73c\ub85c \uba48\ucdb0\uc788\ub294 \uc2dc\uac04\uc774 \ub9ce\uc544\uc9c0\uace0, \uc774\ub97c \ube14\ub7ed\ud0b9(blocking)\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc774\uc720\ub85c \ub3d9\uc2dc\uc5d0 \uc5ec\ub7ec \uc791\uc5c5\uc744 \ud574\uc57c \ud55c\ub2e4\uba74, \uc55e\uc11c \uae00\uc5d0\uc11c \uc0b4\ud3b4\ubcf8 async \ub3d9\uc791\uacfc \uad00\ub828\ud55c \uae30\uc220\uc744 \ud544\uc5f0\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4. \uc774\ub97c \uc774\ud574\ud558\uae30 \uc704\ud558\uc5ec, \ub2e4\uc74c\uc758 \uadf8\ub9bc\uacfc \uc774\uc5d0 \ub300\ud55c \uc124\uba85\uc744 \uc219\uc9c0\ud574 \ubd05\uc2dc\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"693\" height=\"418\" src=\"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/EventLoop.png\" alt=\"\" class=\"wp-image-630\" srcset=\"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/EventLoop.png 693w, http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/EventLoop-300x181.png 300w, http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/EventLoop-480x290.png 480w\" sizes=\"(max-width: 693px) 100vw, 693px\" \/><figcaption>[\uadf8\ub9bc 2] Dart \ud504\ub85c\uadf8\ub7a8\uc758 \ub0b4\ubd80 Queue (\ud050) \uad6c\uc870 <br>(\ucd9c\ucc98: <a href=\"https:\/\/buildflutter.com\/flutter-threading-isolates-future-async-and-await\/\">https:\/\/buildflutter.com\/flutter-threading-isolates-future-async-and-await\/<\/a>)<\/figcaption><\/figure>\n\n\n\n<p>Dart \uc5b8\uc5b4\ub85c \ub9cc\ub4e0 \ud504\ub85c\uadf8\ub7a8\uc740 \uc2e4\ud589\uacfc \ud568\uaed8 \uadf8\ub9bc2\uc640 \uac19\uc740 \ub450 \uac1c\uc758 \ud050\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. Queue(\ud050)\ub294 \ud504\ub85c\uadf8\ub7a8\uc774 \uc218\ud589\ud574\uc57c\ud560 \ub2e4\uc591\ud560 \uc77c\ub4e4\uc744 \uc313\uc544\ub193\uc740 \ud6c4, \uc911\uc694\ub3c4(\uc6b0\uc120\uc21c\uc704)\uc640 \ubc1c\uc0dd\uc21c\uc11c \ub4f1\uc744 \ub2f4\uc548\ud558\uc5ec \ucc98\ub9ac\ub429\ub2c8\ub2e4. Queue\uac00 \ub450\uac1c\uc778\ub370, \ud0a4\ubcf4\ub4dc, \ub9c8\uc6b0\uc2a4, \ud0c0\uc774\uba38, \uc81c\uc2a4\ucd94\uc5b4(gesture), \ub4dc\ub85c\uc789(drawing) \ub4f1\uc758 \uc8fc\ub85c \uc0ac\uc6a9\uc790\uc758 \uc785\ucd9c\ub825\uc5d0 \ub300\ud55c \uc0ac\ud56d\uc740 Event Queue\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4. Microtask Queue\ub294 \uc0c1\ub300\uc801\uc73c\ub85c \uc6b0\uc120\uc21c\uc704\uac00 Event Queue\ubcf4\ub2e4 \ub192\uc73c\uba70, \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c \ub3d9\uc791\uc2dc\ud0a4\ub294 \uc9e7\uc740 \ube44\ub3d9\uae30 \ub3d9\uc791\ub4e4\uc744 \uc800\uc7a5\ud558\ub294\ub370 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. <\/p>\n\n\n\n<p>Native \ubc29\uc2dd\uc758 (\uc11c\ubc84 \uce21) \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud560 \ub54c, Dart VM\uc740 \ubcf4\ub958(\uc800\uc7a5) \uc911\uc778 \ube44\ub3d9\uae30 \uc791\uc5c5\uc758 \uad00\ub828 \uc774\ubca4\ud2b8 \ud050\uc640 \ud568\uaed8 \uc774\ubca4\ud2b8 \ub8e8\ud504\uc5d0\uc11c \uc2e4\ud589 \ud569\ub2c8\ub2e4. Dart VM\uc740 \ud604\uc7ac \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uc5ec \uc644\ub8cc\ud558\uace0 \ub354 \uc774\uc0c1 \ubcf4\ub958 \uc911\uc778 \uc791\uc5c5\uc774 Queue\uc5d0 \uc5c6\uc73c\uba74 \uc885\ub8cc \ud569\ub2c8\ub2e4. \uc774\ub97c \uac04\ub2e8\ud55c \ucf54\ub4dc\ub85c \uc774\ud574\ud558\uae30 \uc704\ud558\uc5ec An introduction to the dart:io library \ud648\ud398\uc774\uc9c0\uc758 \uc0d8\ud50c \ucf54\ub4dc\ub4e4\uc744 \uc0b4\ud3b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4 (\ucd9c\ucc98: <a href=\"https:\/\/dart.dev\/articles\/libraries\/dart-io\">https:\/\/dart.dev\/articles\/libraries\/dart-io<\/a>). <\/p>\n\n\n\n<p>Dart\uc758 Queue \uad6c\uc870\ub97c \uc774\ud574\ud558\uace0, \uc55e\uc11c \ubc30\uc6b4 async\uc758 \uac1c\ub150\uc744 \uc544\uc8fc \uac04\ub2e8\ud558\uac8c \uc5f0\uacb0\ud55c \ub2e4\uc74c\uc758 darttutorial-26-01.dart\uacfc \uc2e4\ud589\uacb0\uacfc\ub97c \uc0b4\ud3b4\ubcf4\ub294 \uac83\uc73c\ub85c \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4. darttutorial-26-01.dart \ud504\ub85c\uadf8\ub7a8\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ darttutorial-26-01.dart\n\/\/ Reference: https:\/\/dart.dev\/articles\/libraries\/dart-io\n\nimport 'dart:async';\n\nvoid main() {\n  Timer(Duration(seconds: 1), () => print('timer'));\n  print('end of main');\n}<\/code><\/pre>\n\n\n\n<p>darttutorial-26-01.dart \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589\uacb0\uacfc\uac00 \uc544\ub798\uc640 \uac19\uc774 \ub098\uc640 \uc788\uc2b5\ub2c8\ub2e4. Timer()\ub294 Dart \uc5b8\uc5b4\uc758 built-in library\ub85c\uc368 \ud544\uc5f0\uc801\uc73c\ub85c aync \ud568\uc218\uc785\ub2c8\ub2e4. \uc774\uc758 \uc0ac\uc6a9\uc744 \uc704\ud574\uc11c dart:async library\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d import \uba85\ub839\uc744 \uc0ac\uc6a9 \ud588\uc2b5\ub2c8\ub2e4. \ub3d9\uc791\ud574\uc57c\ud560 \uc2dc\uc810\uacfc \ub3d9\uc791\uc744 \uc815\ud558\uba70, \uc608\uc81c\uc758 \uacbd\uc6b0\ub294 1\ucd08\ud6c4 timer \ubb38\uc790\uc5f4\uc744 \ucd9c\ub825\ud558\ub77c\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \ub530\ub77c\uc11c, main()\uc758 \ub9c8\uc9c0\ub9c9 \ubd80\ubd84\uc778 print(&#8216;end of main&#8217;);\uc774 \uc218\ud589\ub418\uace0 \ub098\uba74, \uc774\ud6c4 \ud0c0\uc774\uba38\uac00 \uc9c0\uc815\ud55c \uc2dc\uc810\uc5d0\uc11c print(&#8216;timer&#8217;)\uac00 \uc2e4\ud589\ub418\ub294 \ubaa8\uc2b5\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c, \uc55e\uc11c async\uc5d0\uc11c \ubc30\uc6b4 \uac83\ucc98\ub7fc, main()\uc5d0\uc11c \ud560\uc77c\uc740 \ub2e4\ud558\uace0 \uae30\ub2e4\ub9ac\ub2e4\uac00, \ube44\ub3d9\uae30 \ub3d9\uc791\ub4e4\uae4c\uc9c0 \ubaa8\ub450 \ub9c8\uce5c\ud6c4\uc5d0 \ud504\ub85c\uadf8\ub7a8\uc744 \ub3d9\ub8cc\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>end of main\ntimer<\/code><\/pre>\n\n\n\n<h4>Files, Directory and Platform in dart:io Library<\/h4>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0 \ub2e4\ub8e8\uc9c0 \uc54a\uc558\ub358 \ub0b4\uc6a9\uc774\uc9c0\ub9cc, \ub9ce\uc774 \uc0ac\uc6a9\ud558\ub294 \uae30\ub2a5 \uc911 \ud558\ub098\uac00 file\uc744 \ub2e4\ub8e8\ub294 \ubd80\ubd84\uc785\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\uc11c\ub294 file\uc744 \ub2e4\ub8e8\ub294 File class (<a href=\"https:\/\/api.dart.dev\/stable\/2.7.1\/dart-io\/File-class.html\">\ucc38\uc870<\/a>), file\uc744 \ucc3e\uc544\uac00\uae30 \uc704\ud55c Directory class (<a href=\"https:\/\/api.dart.dev\/stable\/2.7.1\/dart-io\/Directory-class.html\">\ucc38\uc870<\/a>), \uadf8\ub9ac\uace0 program\uc774 \ub3d9\uc791\ud558\ub294 \ud658\uacbd\uc744 \ub2e4\ub8e8\ub294 Platform class(<a href=\"https:\/\/api.dart.dev\/stable\/2.7.1\/dart-io\/Platform-class.html\">\ucc38\uc870<\/a>)\uc5d0 \ub300\ud574\uc11c \uac04\ub2e8\ud558\uac8c \uc54c\uc544\ubd05\ub2c8\ub2e4. darttutorial-26-02.dart \ud504\ub85c\uadf8\ub7a8\uc744 \ud1b5\ud574\uc11c \uac00\uc7a5 \uae30\ucd08\uc801\uc778 \ubd80\ubd84\ub4e4\uc744 \uc774\ud574\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ darttutorial-26-02.dart\n\/\/ Reference: https:\/\/dart.dev\/articles\/libraries\/dart-io\n\nimport 'dart:io';\nimport 'dart:convert';\n\nFuture&lt;void> main() async {\n  \/\/ #1 Get the operating system as a string.\n  String os = Platform.operatingSystem;\n  print(\"> OS: $os\");\n  \n  \/\/ #2 Get the URI &amp; Path of the script being run.\n  var uri = Platform.script;\n  var path = uri.toFilePath();\n  print(\"> Source File Name: $path\");\n\n  \/\/ #3 Read and print the source code of THIS program\n  var file = File(Platform.script.toFilePath());\n  print(\"> Source File Contents: [start] \\n\");\n  print(\"${await (file.readAsString(encoding: ascii))}\\n\");\n  print(\"> Source File Contents: [end] \\n\");\n}<\/code><\/pre>\n\n\n\n<p>\ud504\ub85c\uadf8\ub7a8\uc744 \uc0b4\ud3b4\ubcf4\uba74, \uba3c\uc800 dart:io\ub97c import \ud569\ub2c8\ub2e4. \uc774\ub294 Platform, File, Directory class\ub97c \ud65c\uc6a9\ud558\uae30 \uc704\ud568\uc785\ub2c8\ub2e4. dart:convet\ub97c import\ud55c \uc774\uc720\ub294 ascii \ucf54\ub4dc\ub85c\uc758 \uc778\ucf54\ub529\uc744 \uc704\ud568 \uc785\ub2c8\ub2e4. \ud504\ub85c\uadf8\ub7a8\uc740 \ucd1d3\uac00\uc9c0 \ubd80\ubd84\uc73c\ub85c \ub098\ub20c\uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>#1\uc740 Platform \ud074\ub798\uc2a4 \uac1d\uccb4\ub97c \ud1b5\ud574\uc11c \ud504\ub85c\uadf8\ub7a8\uc774 \ub3d9\uc791\ud558\ub294 \ucef4\ud4e8\ud130\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \ud68d\ub4dd\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc774\uc911 \uc6b4\uc601\uccb4\uc81c\uc758 \uc774\ub984\uc744 \uc54c\ub824\uc8fc\ub294 operatingSystem property\ub97c \ud1b5\ud574\uc11c \uc6b4\uc601\uccb4\uc81c \uc815\ubcf4\ub97c \ud68d\ub4dd\ud558\uace0, \ud654\uba74\uc5d0 \ucd9c\ub825\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>#2\ub294 Platform \ud074\ub798\uc2a4 \uac1d\uccb4\uc758 script property\ub294 \ud604\uc7ac \uc218\ud589\uc911\uc778 \ud504\ub85c\uadf8\ub7a8\uc758 \uc704\uce58\ub97c URI \ud615\ud0dc\ub85c \ud45c\uc2dc\ud569\ub2c8\ub2e4. \uc774\ub294 \uc778\ud130\ub137\uc744 \ud1b5\ud574\uc11c \uc811\uadfc\ud558\uae30 \uc704\ud574\uc11c \ucd94\uac00\uc815\ubcf4\uac00 \ud3ec\ud568\ub41c \uac83\uc73c\ub85c, \ucef4\ud4e8\ud130\uc5d0\uc11c \ub2e4\ub8e8\uae30 \uc704\ud55c \uc815\ubcf4\ub9cc \ucd94\ucd9c\ud558\ub294 \uc791\uc5c5\uc744 \uc704\ud558\uc5ec, URI\ub97c \ud654\uc77c \uacbd\ub85c(File Path)\ub85c \ubcc0\ud658\ud558\ub294 \uc791\uc5c5\uc744 uri.toFilePath()\ub85c \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>#3\uc5d0\uc11c\ub294 \uc2e4\ud589\ud654\uc77c\uc758 \uc18c\uc2a4\ud504\ub85c\uadf8\ub7a8\uc778 darttutorial-26-02.dart\uc640 \uc774\uc758 \uc704\uce58 \uc815\ubcf4\uac00 \ucd94\uac00\ub41c Platform.script.toFilePath()\ub97c File() \ud074\ub798\uc2a4\uc758 constructor\uc5d0 \uc785\ub825 \ud30c\ub77c\uba54\ud0c0\ub85c \uc8fc\uc5b4\uc11c File \ud074\ub798\uc2a4\uc758 \uac1d\uccb4\ub97c \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uac1d\uccb4\ub294 \uc774\uc81c \ud574\ub2f9 \uc18c\uc2a4\ucf54\ub4dc\uc640 1:1\ub85c \ub9e4\ud551\ub418\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ud6c4 \uc774 \ud654\uc77c\uc758 \ub0b4\uc6a9\uc744 \ubb38\uc790\uc5f4\ub85c \uc77d\uc5b4\ub4e4\uc774\ub294 \uba64\ubc84 \uba54\uc18c\ub4dc\uc778 readAsString() \uc218\ud589\ud558\uac8c \ub429\ub2c8\ub2e4. \uc774\ub54c \uc77d\uc5b4\ub4dc\ub9ac\ub294 \ubc29\uc2dd\uc744 ASCII \ucf54\ub4dc \ubc29\uc2dd\uc744 \uc9c0\uc815\ud558\uc5ec, \ud654\uba74\uc5d0 \ucd9c\ub825\ud560 \ub54c\uc5d0\ub3c4 \ubb38\uc81c\uac00 \uc5c6\ub3c4\ub85d \ud558\uc600\uc2b5\ub2c8\ub2e4. readAsString() \uba54\uc18c\ub4dc\ub294 \ube44\ub3d9\uae30 \ubc29\uc2dd\uc73c\ub85c \ub3d9\uc791\ud558\uc5ec, \uc77d\uc5b4\ub4dc\ub9ac\ub294 \ub3d9\uc548\uc5d0\ub3c4 \ub2e4\ub978 \uc77c\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, await \uad6c\ubb38\uc744 \ud1b5\ud574\uc11c \ube44\ub3d9\uae30\uc801\uc778 \uc791\uc5c5\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \ud558\uace0, \uc774\uc758 \uacb0\uacfc\uac00 \ub9ac\ud134\ub418\uba74, \uacb0\uacfc\ub97c \ud654\uba74\uc5d0 \ucd9c\ub825\ud569\ub2c8\ub2e4. <\/p>\n\n\n\n<p>darttutorial-26-02.dart \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589 \uacb0\uacfc\uac00 \uc544\ub798\uc640 \uac19\uc774 \ub098\ud0c0\ub098 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ud574\ud55c \ubd80\ubd84\uacfc \uac19\uac8c \ub3d9\uc791\ud558\ub294\uc9c0 \ucc9c\ucc9c\ud788 \uc0b4\ud3b4\ubcf4\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>> OS: macos\n> Source File Name: \/Users\/drsungwon\/OneDrive\/Programming\/hellodart\/darttutorial-26\/darttutorial-26-02.dart\n> Source File Contents: [start] \n\n\/\/ darttutorial-26-02.dart\n\/\/ Reference: https:\/\/dart.dev\/articles\/libraries\/dart-io\n\nimport 'dart:io';\nimport 'dart:convert';\n\nFuture&lt;void> main() async {\n  \/\/ #1 Get the operating system as a string.\n  String os = Platform.operatingSystem;\n  print(\"> OS: $os\");\n  \n  \/\/ #2 Get the URI &amp; Path of the script being run.\n  var uri = Platform.script;\n  var path = uri.toFilePath();\n  print(\"> Source File Name: $path\");\n\n  \/\/ #3 Read and print the source code of THIS program\n  var file = File(Platform.script.toFilePath());\n  print(\"> Source File Contents: [start] \\n\");\n  print(\"${await (file.readAsString(encoding: ascii))}\\n\");\n  print(\"> Source File Contents: [end] \\n\");\n}\n\n> Source File Contents: [end] <\/code><\/pre>\n\n\n\n<h4>File Random Access in dart:io Library<\/h4>\n\n\n\n<p>Random access\ub780 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc5d0\uc11c, \ud654\uc77c\uc758 \ud2b9\uc815 \uc704\uce58 \ub4e4\uc744 \ucc3e\uc544 \ub2e4\ub2c8\uba74\uc11c \uc6d0\ud558\ub294 \uc9c0\uc810\uc5d0 \uc6d0\ud558\ub294 \uc815\ubcf4\ub97c \uc800\uc7a5, \uc0ad\uc81c \ud639\uc740 \uc77d\uc5b4 \ub0b4\ub294 \uc791\uc5c5\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. darttutorial-26-03.dart\ub294 darttutorial-26-02.dart\ub97c random access \ubaa8\ub4dc\ub85c \ubc14\uafb8\uc5b4\uc11c, \uc55e\uc73c\ub85c \ud654\uc77c\uc744 \ub2e4\ub8f0\ub54c \uc5b4\ub5bb\uac8c \ub2e4\ub904\uc57c \ud558\ub294\uc9c0\uc758 \uac04\ub2e8\ud55c \ud615\ud0dc\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"556\" height=\"580\" src=\"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u1112\u116e-2.19.48.png\" alt=\"\" class=\"wp-image-633\" srcset=\"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u1112\u116e-2.19.48.png 556w, http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u1112\u116e-2.19.48-288x300.png 288w, http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u1112\u116e-2.19.48-480x501.png 480w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/><figcaption>[\uadf8\ub9bc 3] darttutorial-26-03.dart \uc18c\uc2a4 \ud504\ub85c\uadf8\ub7a8<\/figcaption><\/figure>\n\n\n\n<p>darttutorial-26-02.dart \ubcf4\ub2e4 \ubcf5\uc7a1\ud558\ub2e4\uace0 \uc0dd\uac01\ud560 \uc218 \uc788\uc9c0\ub9cc, \ucc9c\ucc9c\ud788 \uc77d\uc5b4 \ubcf4\uba74 \ub9ce\uc774 \ub2e4\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc77c\ub2e8 7\/8\ubc88 \uc904\uc740 \uc18c\uc2a4 \ud504\ub85c\uadf8\ub7a8\uc758 \uc904\ubc14\uafc8\uc744 \uc778\uc2dd\ud558\uae30 \uc704\ud55c \uc6a9\ub3c4\uc785\ub2c8\ub2e4. &#8216;;&#8217;.codeUnitAt(0);\uacfc \uac19\uc774 \ud558\uc5ec\uc11c, \ubb38\uc790\uc5f4\uc758 0\ubc88\uc9f8 \uc704\uce58 \ubb38\uc790\uc758 UTF-16 \ucf54\ub4dc\ub85c \ubcc0\ud658\ud588\uc73c\ub2c8, \uc27d\uac8c \ub9d0\ud558\uba74, \uc138\ubbf8\ucf5c\ub860(;)\uc758 UTF-16 \ucf54\ub4dc\ub97c \uc5bb\uc740 \uac83 \uc785\ub2c8\ub2e4. \ub9c8\ucc2c\uac00\uc9c0\ub85c &#8216;}&#8217;\ub97c UTF-16 \ucf54\ub4dc\ub85c \ubcc0\ud658\ud588\uc2b5\ub2c8\ub2e4. Dart \uc5b8\uc5b4\uac00 UTF-16\uc744 \uae30\ubcf8 \ucf54\ub4dc\ub85c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. 9\ubc88 \uc904\uc740 \ud654\uc77c\uc5d0\uc11c \ud55c\uae00\uc790\uc529 \uc77d\uc5b4 \ub4e4\uc5ec\uc11c \ud55c\uc904\uc744 \ub9cc\ub4e4\uae30 \uc704\ud55c \uc815\ubcf4\ub97c \uc800\uc7a5\ud558\ub294 \uc6a9\ub3c4\uc758 \ub9ac\uc2a4\ud2b8 \uc785\ub2c8\ub2e4. 12\ubc88 \uc904\uc740 \uc55e\uc11c\uc640 \ub3d9\uc77c\ud558\uba70, 13\ubc88\uc5d0\uc11c random access\ub97c \uc704\ud55c \ubc29\uc2dd\uc73c\ub85c open \uba54\uc18c\ub4dc\ub97c \uc2e4\ud589\ud558\uc600\uace0, \uc77d\uae30 \uc804\uc6a9\uc778 FileMode.read\ub85c \uc5f0 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370, \uc774 \uacbd\uc6b0 \ud654\uc77c\uc744 \uc5ec\ub294 \uc791\uc5c5\uc740 I\/O\uc791\uc5c5\uc73c\ub85c \uc2dc\uac04\uc774 \uac78\ub9b4\uc218 \uc788\uc73c\ub2c8, await\ub85c \ube44\ub3d9\uae30 \ubaa8\ub4dc \uc791\uc5c5\uc744 \ud560 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ud6c4 while \ubc18\ubcf5\ubb38\uc744 \ud1b5\ud574\uc11c file.readByte()\ub97c \ud1b5\ud574\uc11c \ud654\uc77c\uc5d0\uc11c \ud55c\uae00\uc790\uc529 \uc77d\uc5b4 \ub4e4\uc785\ub2c8\ub2e4. \uc774\ud6c4 \uc870\uac74\ubb38\uc5d0\uc11c -1\uc778\uc9c0 \ube44\uad50\ud558\ub294 \uad6c\ubb38\uc740 \ud654\uc77c\uc758 \ub05d\uae4c\uc9c0 \uc77d\uc5c8\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. file.readByte()\ub294 \ud654\uc77c\uc758 \ub05d\uae4c\uc9c0 \uac00\uba74 -1\uc744 \ub9ac\ud134 \ud569\ub2c8\ub2e4. \uc774 \uacbd\uc6b0\ub294 file.close()\ub97c \ud1b5\ud574\uc11c \ud654\uc77c\uc744 \ub2eb\uc2b5\ub2c8\ub2e4. open\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c I\/O \uc791\uc5c5\uc744 \uc704\ud55c \ube44\ub3d9\uae30 \ubaa8\ub4dc\ub85c \ub3d9\uc791\ud558\ub294 await \uad6c\ubb38\uc744 \uc0ac\uc6a9 \ud558\uc600\uc2b5\ub2c8\ub2e4. \ud654\uc77c\uc758\ub05d \ubd80\ubd84\uc774 \uc544\ub2cc \uacbd\uc6b0\ub294 \ucd94\ud6c4 \ucd9c\ub825\uc744 \uc704\ud558\uc5ec \ub9ac\uc2a4\ud2b8\uc5d0 \uc77d\uc740 \uae00\uc790\ub97c \uc800\uc7a5\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace4 \uc904\uc758 \ub05d\uae4c\uc9c0 \uc628 \uac83\uc778\uc9c0\ub97c \ud655\uc778\ud558\uc5ec, \uc904\uc758 \ub05d\uc774\uba74 \ub9cc\ub4e0 \uc904\uc744 \ucd9c\ub825\ud558\uace0 \ub2e4\uc2dc \ub2e4\uc74c \uc904\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud558\uc5ec, \ub9ac\uc2a4\ud2b8\ub97c \ucd08\uae30\ud654 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589 \uacb0\uacfc\ub294 \uc55e\uc11c darttutorial-26-02.dart \uc640 \ubcc4\ubc18 \ub2e4\ub974\uc9c0 \uc54a\uae30\uc5d0 \ucd94\uac00\ub85c \ubcf8 \uae00\uc5d0 \ud3ec\ud568\ud558\uc9c0\ub294 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h4>File Stream in dart:io Library<\/h4>\n\n\n\n<p>Stream(<a href=\"https:\/\/api.dart.dev\/stable\/2.7.1\/dart-async\/Stream-class.html\">\ucc38\uc870<\/a>)\uc740 \ube44\ub3d9\uae30\uc801\uc774\uba74\uc11c \uc21c\ucc28\uc801\uc778 \ub370\uc774\ud0c0\ub4e4\uc744 \ub2e4\ub8e8\ub294 \ud504\ub85c\uadf8\ub798\ubc0d \uae30\ubc95\uc785\ub2c8\ub2e4. \ub9d0\uc774 \uc5b4\ub824\uc6b8 \uc218 \uc788\ub294\ub370, \ud0a4\ubcf4\ub4dc\ub97c \uacc4\uc18d \ud0c0\uc774\ud551\ud558\ub294 \uacbd\uc6b0\ub97c \uc0dd\uac01\ud574 \ubd05\ub2c8\ub2e4. \ud0a4\ubcf4\ub4dc\ub97c \uafb8\uc900\ud558\uac8c \ud0c0\uc774\ud551\ud558\uba74 \uae00\uc790\ub4e4\uc774 \ub04a\uc784 \uc5c6\uc774 \ucef4\ud4e8\ud130 \uc548\uc73c\ub85c \ud5a5\ud574\uc11c \ub4e4\uc5b4\uac11\ub2c8\ub2e4. \ub9c8\uce58 \ubb3c\uc904\uae30 \ucc98\ub7fc \uc815\ubcf4\uac00 \uc8fc\ub974\ub975 \ud758\ub7ec\uc11c \ub4e4\uc5b4\uac00\ub294 \uc774\ub7f0 \ub370\uc774\ud0c0\uc758 \ud750\ub984\uc744 Stream \uc774\ub77c\uace0 \ud569\ub2c8\ub2e4. \ud0a4\ubcf4\ub4dc\uc640 \uac19\uc774 \uc0ac\uc6a9\uc790\uc640\uc758 \uc0c1\ud638\uc791\uc6a9\uc5d0\uc11c \ubc1c\uc0dd\ud558\ub294 \uc774\ubca4\ud2b8 \ub4e4\uc774 \uc5ec\uae30\uc5d0 \ud574\ub2f9\ud558\uba70, \ucef4\ud4e8\ud130 \ud654\uc77c\ub3c4 Stream\uc744 \ud1b5\ud574\uc11c \ucc98\ub9ac\ud558\ub294 \uacbd\uc6b0\uac00 \uc77c\ubc18 \uc801\uc785\ub2c8\ub2e4. \uc774\uacbd\uc6b0 \uc6b0\ub9ac\ub294 await for \ub77c\ub294 \uc0c8\ub85c\uc6b4 \ubc18\ubcf5\ubb38\ub3c4 \ub9cc\ub098\uac8c \ub429\ub2c8\ub2e4. \ubbf8\ub9ac \uc124\uba85\ud558\uba74, \ube44\ub3d9\uae30\uc801\uc778 \uc791\uc5c5\uc774 \uc544\ub2c8\ub77c\uba74 for \uad6c\ubb38\ub9cc\uc73c\ub85c \ucda9\ubd84\ud558\uae30\ub9cc, \ubc18\ubcf5\ubb38 \uc548\uc5d0\uc11c Stream\uacfc \uac19\uc774 \ube44\ub3d9\uae30\uc801\uc73c\ub85c \ubc1c\uc0dd\ud558\ub294 \uc815\ubcf4\ub97c (\uae30\ub2e4\ub9ac\uba74\uc11c) \uac00\uc838\uc640\uc57c \ud55c\ub2e4\uba74, &#8220;\ube44\uacf5\uae30\uc801 \uc791\uc5c5\uc744 \uc704\ud55c for&#8221; \uad6c\ubb38\uc774\ub77c\ub294 \uc758\ubbf8\uc5d0\uc11c  await for \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p>darttutorial-26-03.dart \ud504\ub85c\uadf8\ub7a8\uc744 Stream \ubaa8\ub4dc\ub85c \ub2e4\uc2dc \uc791\uc131\ud55c \ud504\ub85c\uadf8\ub7a8\uc774 darttutorial-26-04.dart\uc5d0 \ub098\ud0c0\ub098 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"622\" height=\"455\" src=\"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u1112\u116e-3.14.40.png\" alt=\"\" class=\"wp-image-636\" srcset=\"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u1112\u116e-3.14.40.png 622w, http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u1112\u116e-3.14.40-300x219.png 300w, http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-content\/uploads\/2020\/02\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-02-12-\u110b\u1169\u1112\u116e-3.14.40-480x351.png 480w\" sizes=\"(max-width: 622px) 100vw, 622px\" \/><figcaption>[\uadf8\ub9bc 4] darttutorial-26-04.dart \uc18c\uc2a4 \ud504\ub85c\uadf8\ub7a8<\/figcaption><\/figure>\n\n\n\n<p>darttutorial-26-03.dart \ubcf4\ub2e4 \uc870\uae08 \ub2e8\ucd9c\ud574\uc9c4 \ucf54\ub4dc\ub97c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2ec\ub77c\uc9c4 \ubd80\ubd84 \uc911\uc2ec\uc73c\ub85c \uc124\uba85\ud558\uba74, \uc77c\ub2e8 \ud654\uc77c\uc744 \uc5ec\ub294 \ubd80\ubd84\uc778 12\ubc88 \uc904 \uc785\ub2c8\ub2e4. \ud654\uc77c\uc744 \uc5f4\uc5b4\uc11c, List&lt;int&gt; \ub4e4\ub85c (\ud55c \uc904\uc529) \uc774\ub8e8\uc5b4\uc9c4 Stream \ud074\ub798\uc2a4\uc758 \uac1d\uccb4\uc778 stream\uc73c\ub85c \ub9ac\ud134\ud574 \uc90d\ub2c8\ub2e4. \ud654\uc77c\uc744 \uc815\uc218 \ucf54\ub4dc\ub4e4\ub85c \uc774\ub8e8\uc5b4\uc9c4 \uc904\ub4e4\ub85c \uc815\uc758\ud55c \uac83\uc774\uc9c0\uc694. \ub2e4\uc74c\uc73c\ub85c stream\uc73c\ub85c \uba85\uba85\ud55c \ud654\uc77c\uc5d0\uc11c \ud55c\uc904\uc529 \uc77d\uc5b4 \ub4e4\uc774\ub294 \ucf54\ub4dc\ub294 15\ubc88 \uc911\uc785\ub2c8\ub2e4. var data in stream\uc744 \ud1b5\ud574\uc11c \ud55c\uc904\uc529 \uc77d\uc740 \uc815\ubcf4\uac00 data\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4. \ub9cc\uc57d stream\uc5d0\uc11c \ub354\uc774\uc0c1 \uc77d\uc744 \ubd80\ubd84\uc774 \uc5c6\uc73c\uba74 for \ubc18\ubcf5\ubb38\uc740 \ub3d9\uc791\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370, Stream\uc740 \uc55e\uc11c \uc124\uba85\ud55c \uac83\ucc98\ub7fc \ube44\ub3d9\uae30 \ubaa8\ub4dc\ub85c \ub3d9\uc791\ud558\ubbc0\ub85c, \uae30\uc874 for \ubc18\ubcf5\ubb38 \ucc98\ub7fc, \uc774\ubbf8 \uc900\ube44\ub41c \ub370\uc774\ud0c0\ub97c \ucc98\ub9ac\ud558\ub294 \ubc29\ubc95 \ub300\uc2e0 await \uad6c\ubb38\uc744 for \uad6c\ubb38\uc55e\uc5d0 \ucd94\uac00\ud55c await for \uad6c\ubb38\uc744 \uc368\uc5ec \ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \ubc18\ubcf5\ubb38 \uc548\uc5d0\uc11c\ub294 \ubcc4\ub3c4\uc758 await \uad6c\ubb38\uc740 \uc5c6\uc2b5\ub2c8\ub2e4. \ud55c\uc904\uc529 \uc77d\uc5b4 \ub4e4\uc774\uae30\uc5d0, \uc55e\uc11c \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c\uc758 \ud55c \uae00\uc790 \ub2e8\uc704 \ucf54\ub4dc\ub97c \uc7ac\uc0ac\uc6a9\ud558\uae30 \uc704\ud558\uc5ec \ub2e4\uc2dc \ud55c\ubc88 \ud55c\uc904\uc744 \uae00\uc790\ub4e4\ub85c \ubc14\uafb8\ub294 for (int i = 0; i &lt; data.length; i++) { .. } \uad6c\ubb38\uc774 \ub098\ud0c0\ub0a9\ub2c8\ub2e4. \ud55c\uc904\uc758 \uae38\uc774\uac00  data.length property\uc5d0 \uc800\uc7a5\ub418\uc5c8\uc73c\ub2c8, \ud55c\uc904\uc5d0\uc11c \ud55c\uae00\uc790\uc529 \uaebc\ub0b4\uc11c \ucc98\ub9ac\ud558\ub294 \uc148\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589 \uacb0\uacfc\ub294 \uc55e\uc11c darttutorial-26-02.dart \uc640 \ubcc4\ubc18 \ub2e4\ub974\uc9c0 \uc54a\uae30\uc5d0 \ucd94\uac00\ub85c \ubcf8 \uae00\uc5d0 \ud3ec\ud568\ud558\uc9c0\ub294 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h4>Processes in dart:io Library<\/h4>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0 \ud568\uc218\ub97c \ube44\ub3d9\uae30 \ubaa8\ub4dc\ub85c \ub3d9\uc791\uc2dc\ud0a4\ub294 \ub0b4\uc6a9\uc5d0 \ub300\ud574\uc11c \uc0b4\ud3b4 \ubcf4\uc558\uc2b5\ub2c8\ub2e4. Dart\uc758 Process(\ud504\ub85c\uc138\uc2a4) \ud074\ub798\uc2a4\ub294 &#8220;\ud504\ub85c\uadf8\ub7a8&#8221;\uc744 \uc218\ud589\ud558\ub294 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ud575\uc2ec \uba54\uc18c\ub4dc\ub294 run\uacfc start \uc785\ub2c8\ub2e4. run \uba54\uc18c\ub4dc\ub294 \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589\uc911\uc5d0 \uc0ac\uc6a9\uc790(\ud639\uc740 \ud504\ub85c\uc138\uc2a4)\uc640\uc758 \uc778\ud130\uc561\uc158\uc774 \uc5c6\ub294 \uacbd\uc6b0\ub97c \uc758\ubbf8\ud558\uba70, start\uc758 \uacbd\uc6b0\ub294 &#8220;\uc2dc\uc791&#8221;\uc774\ub77c\ub294 \uc758\ubbf8\ucc98\ub7fc, \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589\uc744 \uc2dc\uc791\ud558\ub418, \uc0ac\uc6a9\uc790(\ud639\uc740 \ud504\ub85c\uc138\uc2a4)\uc640\uc758 \uc778\ud130\uc561\uc158\uc744 \ud3ec\ud568\ud558\uaca0\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4 (<a href=\"https:\/\/api.dart.dev\/stable\/2.7.1\/dart-io\/Process-class.html\">\ucc38\uc870<\/a>).  <\/p>\n\n\n\n<p>start \uba54\uc18c\ub4dc\ub294 \uc8fc\uc5b4\uc9c4 \uc785\ub825 \ud30c\ub77c\uba54\ud0c0\uc758 \ud504\ub85c\uadf8\ub7a8\uc744 \uc218\ud589\ud558\uba70, \ub9ac\ud134 \uac12\uc774 Future&lt;Process&gt; \ud0c0\uc785\uc785\ub2c8\ub2e4. \uc774\ub294 \uc131\uacf5\uc801\uc73c\ub85c \ud504\ub85c\uadf8\ub7a8\uc774 \uc218\ud589\ub418\uc5c8\ub2e4\ub294 \uc758\ubbf8\ub85c \ub9ac\ud134\ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c, \ub9ac\ud134\ub41c \ud504\ub85c\uc138\uc2a4 \uac1d\uccb4\ub97c \ud1b5\ud574\uc11c \ud504\ub85c\uc138\uc2a4\uc640\uc758 \uc778\ud130\uc561\uc158\uc744 \uc218\ud589\ud569\ub2c8\ub2e4. \ub9cc\uc57d \uc785\ub825 \ud30c\ub77c\uba54\ud0c0\ub85c \uc8fc\uc5b4\uc9c4 \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589\uc5d0 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud558\uba74 exception\uc774 \ubc1c\uc0dd\ud569\ub2c8\ub2e4 (<a href=\"https:\/\/api.dart.dev\/stable\/2.7.1\/dart-io\/Process\/start.html\">\ucc38\uc870<\/a>). <\/p>\n\n\n\n<p>run \uba54\uc18c\ub4dc\ub294 \uc55e\uc11c \uc124\uba85\ucc98\ub7fc \ud504\ub85c\uadf8\ub7a8\uc774 \uc218\ud589\ub418\uc5b4, \uc778\ud130\uc561\uc158 \uc5c6\uc774 \uacb0\uacfc\ub9cc \ucde8\ud558\uba74 \ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c \ub9ac\ucee8 \ud0c0\uc785\uc774 Future&lt;ProcessResult&gt;\ub85c \ub418\uba70, \uc774\ub294 \ud504\ub85c\uadf8\ub7a8\uc758 \uc885\ub8cc\uc5d0 \ub530\ub978 exit code, \ud639\uc740 stdin\/stdout\uc758 \ud615\ud0dc\ub85c \uc8fc\uc5b4 \uc9d1\ub2c8\ub2e4.<\/p>\n\n\n\n<p>run \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud55c \uac04\ub2e8\ud55c \uc608\uc81c \ud504\ub85c\uadf8\ub7a8\uc774 darttutorial-26-05.dart\uc5d0 \ub098\ud0c0\ub098 \uc788\uc2b5\ub2c8\ub2e4. \ud504\ub85c\uadf8\ub7a8\uc740 \uac04\ub2e8\ud569\ub2c8\ub2e4. \ubcf8\ubb38\uc774 2\uc904 \ubc16\uc5d0\ub294 \uc548\ub429\ub2c8\ub2e4. Process.run(&#8216;ls&#8217;, [&#8216;-l&#8217;]); \uad6c\ubb38\uc740 Unix\/Linux \uba85\ub839(\ud504\ub85c\uadf8\ub7a8)\uc778 ls\ub97c -l \uc635\uc158\uc744 \uc8fc\uc5b4\uc11c \uc2e4\ud589\ud558\ub294 \uac83\uc73c\ub85c\uc11c, \uc778\ud130\uc561\uc158 \uc5c6\uc774 \uacb0\uacfc\ub9cc \ucde8\ud558\uba74 \ub418\ubbc0\ub85c, Process \ud074\ub798\uc2a4\uc758 run \uba54\uc18c\ub4dc\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ube44\ub3d9\uae30\uc2dd \ubaa8\ub4dc\ub85c \ub3d9\uc791\uc744 \ud574\uc57c \ud558\ubbc0\ub85c, await \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc81c\ub300\ub85c\ub41c \uacb0\uacfc\uac00 \ub9ac\ucee8\ub418\uae30\ub97c \uae30\ub2e4\ub9b0\ud6c4, \uacb0\uacfc\ub97c results\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ darttutorial-26-05.dart\n\/\/ Reference: https:\/\/dart.dev\/articles\/libraries\/dart-io\n\nimport 'dart:io';\n\nFuture&lt;void> main() async {\n  \/\/ List all files in the current directory,\n  \/\/ in UNIX-like operating systems.\n  ProcessResult results = await Process.run('ls', ['-l']);\n  print(results.stdout);\n}<\/code><\/pre>\n\n\n\n<p>print \uad6c\ubb38\uc744 \ud1b5\ud574\uc11c \uacb0\uacfc\ub97c \ud654\uba74\uc5d0 \ucd9c\ub825\ud588\uc2b5\ub2c8\ub2e4. ls\ub294 \ud604\uc7ac \ub514\ub809\ud1a0\ub9ac\uc5d0 \uc788\ub294 \ud654\uc77c\uc758 \ub9ac\uc2a4\ud2b8\ub97c \ud655\uc778\ud558\ub294 \uba85\ub839\uc774\ubbc0\ub85c, \ubcf8 \uae00\uc5d0\uc11c \uc0ac\uc6a9\ud55c \uc608\uc81c \ud504\ub85c\uadf8\ub7a8\ub4e4\uc758 \uc774\ub984\uc774 \uc21c\ucc28\uc801\uc73c\ub85c \ub098\ud0c0\ub0a8\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>total 40\n-rw-r--r--  1 drsungwon  staff  200 Feb 12 13:11 darttutorial-26-01.dart\n-rw-r--r--  1 drsungwon  staff  675 Feb 12 13:58 darttutorial-26-02.dart\n-rw-r--r--  1 drsungwon  staff  841 Feb 12 15:01 darttutorial-26-03.dart\n-rw-r--r--  1 drsungwon  staff  682 Feb 12 15:14 darttutorial-26-04.dart\n-rw-r--r--  1 drsungwon  staff  301 Feb 12 15:50 darttutorial-26-05.dart<\/code><\/pre>\n\n\n\n<p>darttutorial-26-05.dart \ud504\ub85c\uadf8\ub7a8\uc744 Process.start()\ub85c \uc218\ud589\ud55c \ud504\ub85c\uadf8\ub7a8 \uc608\uc81c\uac00 Dart \uacf5\uc2dd \ud648\ud398\uc774\uc9c0\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\ud0c0\ub098 \uc788\uc2b5\ub2c8\ub2e4. \uacf5\ubd80 \uc0bc\uc544 \ud55c\uc904 \ud55c\uc904 \uc774\ud574\ub97c \ud574\ubcf4\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import 'dart:convert';\nimport 'dart:io';\n\nFuture&lt;void> main() async {\n  final process = await Process.start('ls', ['-l']);\n  var lineStream = \n    process.stdout.transform(Utf8Decoder()).transform(LineSplitter());\n  await for (var line in lineStream) {\n    print(line);\n  }\n\n  await process.stderr.drain();\n  print('exit code: ${await process.exitCode}');\n}<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/dart.dev\/articles\/libraries\/dart-io\">An introduction to the dart:io library<\/a>\uc5d0\ub294 Process.start()\ub97c \uc0ac\uc6a9\ud558\ub294 \ub2e4\uc74c\uc758 \uc608\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. ls \uba85\ub839\uc758 \uacb0\uacfc\ub97c \uc800\uc7a5\ud560 File \uac1d\uccb4\uc778 output\uc774 \uc788\uace0, Process.start()\ub85c ls \ud504\ub85c\uadf8\ub7a8\uc744 \uc218\ud589\ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0c8\ub86d\uac8c \ub4f1\uc7a5\ud55c \uba54\uc18c\ub4dc\ub294 Future \ud074\ub798\uc2a4\uc758 wait \uba54\uc18c\ub4dc \uc785\ub2c8\ub2e4. \uc774 \uba54\uc18c\ub4dc\ub294 \ube44\ub3d9\uae30\ub85c \ub3d9\uc791\ud560 \uae30\ub2a5\ub4e4\uc774 \ubaa8\ub450 \ub9c8\uccd0\uc9c0\uae30\ub97c \uae30\ub2e4\ub9b0 \ud6c4, \uc774\ub4e4\uc758 \uacb0\uacfc\ub97c \ubaa8\uc544\uc11c \ub2e4\uc2dc \ub9ac\ud134 \ud569\ub2c8\ub2e4. \ub9ac\ucee8 \ub418\ub294 \uacb0\uacfc\ub97c \ub9ac\uc2a4\ud2b8\uc758 \ud615\ud0dc\ub85c \ub418\uba70, \uc774\ub7ec\ud55c \uc774\uc720\ub85c, \uc544\ub798\uc758 \uc608\uc81c\ub97c \ubcf4\uba74 \ub9c8\uc9c0\ub9c9 \uc904\uc5d0 process.exitCode\uc758 \uacb0\uacfc\ub97c \ucd9c\ub825\ud558\uae30 \uc704\ud574\uc11c, [2]\uc758 \uc778\ub371\uc2a4\ub97c \ucde8\ud558\ub294 \ubaa8\uc2b5\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c, \uc544\ub798\uc758 \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c \uac00\uc7a5 \uc911\uc694\ud55c \ubd80\ubd84\uc740 \ub9ac\uc2a4\ud2b8\ub85c \uc774\ub8e8\uc5b4\uc9c4 \uc791\uc5c5\uc778, 1) process\uc758 stdout \ucabd\uc73c\ub85c \ub098\uac08 \uacb0\uacfc\ub97c pipe \uba54\uc18c\ub4dc\ub97c \ud1b5\ud574\uc11c (\ubc29\ud5a5\uc744 \ubc14\uafb8\uc5b4) output.txt \ud654\uc77c\ub85c \uc800\uc7a5\ud558\uae30 (<a href=\"https:\/\/api.flutter.dev\/flutter\/dart-async\/Stream\/pipe.html\">\ucc38\uc870<\/a>), 2) process\uc758 stderr(standard error)\ub97c \ud1b5\ud574\uc11c \uc5d0\ub7ec\uac00 \ub3c4\ucd9c \ub41c\ub2e4\uba74, \uc774\ub97c \ube44\uc6b0\ub294 \uc791\uc5c5\ud558\uae30 (<a href=\"https:\/\/api.flutter.dev\/flutter\/dart-async\/Stream\/drain.html\">\ucc38\uc870<\/a>), 3) \ub9c8\uc9c0\ub9c9\uc73c\ub85c process \uc885\ub8cc\ud6c4 exitCode\ub97c \uac00\uc838\uc624\uae30 (<a href=\"https:\/\/api.dart.dev\/stable\/2.7.1\/dart-io\/Process-class.html\">\ucc38\uc870<\/a>), \uc774\ub807\uac8c \uc138\uac00\uc9c0 \uc791\uc5c5\uc744 \ube44\ub3d9\uae30\uc801\uc73c\ub85c \ub3c5\ub9bd\uc801\uc778 \uc218\ud589\uc744 \ud569\ub2c8\ub2e4. \uc774\uc758 \uc791\uc5c5\uc744 \ub9c8\uce58\uba74, \ub9ac\ud134 \ubc1b\uc740 \uacb0\uacfc\ub4e4\uc758 \ub9ac\uc2a4\ud2b8\uc5d0\uc11c exitCode\uc5d0 \ud574\ub2f9 \ud558\ub294 \uac12\uc744 [2] \uc778\ub371\uc2a4\ub85c \uc811\uadfc\ud558\uc5ec \ud654\uba74\uc5d0 \ucd9c\ub825\ud558\uace0 \uc885\ub8cc\ud558\uac8c \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import 'dart:io';\n\nFuture&lt;void> main() async {\n  final output = File('output.txt').openWrite();\n  Process process = await Process.start('ls', ['-l']);\n\n  \/\/ Wait for the process to finish; get the exit code.\n  final exitCode = (await Future.wait([\n    process.stdout.pipe(output), \/\/ Send stdout to file.\n    process.stderr.drain(), \/\/ Discard stderr.\n    process.exitCode\n  ]))[2];\n\n  print('exit code: $exitCode');\n}<\/code><\/pre>\n\n\n\n<p>Future \ud074\ub798\uc2a4\uc758 wait \uba54\uc18c\ub4dc\ub97c \uc880 \ub354 \uc27d\uace0 \uc774\ud574\ud558\uae30 \ud3b8\ud558\uac8c \ub9cc\ub4e0 \uc608\uc81c\ub97c darttutorial-26-06.dart\ub85c \ub098\ud0c0\ub0b4\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ub294  https:\/\/alvinalexander.com\/dart\/how-run-multiple-dart-futures-in-parallel \uc0ac\uc774\ud2b8\uc5d0 \uc788\ub294 \ud504\ub85c\uadf8\ub7a8\uc744 \uadf8\ub300\ub85c \ucc38\uc870\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ darttutorial-26-06.dart\n\/\/ Reference: https:\/\/alvinalexander.com\/dart\/how-run-multiple-dart-futures-in-parallel\n\nimport 'dart:async';\n\nFuture&lt;int> async1() async {\n    await Future&lt;String>.delayed(const Duration(seconds: 1));\n    return 10;\n}\n\nFuture&lt;int> async2() async {\n    await Future&lt;String>.delayed(const Duration(seconds: 2));\n    return 20;\n}\n\nFuture&lt;int> async3() async {\n    await Future&lt;String>.delayed(const Duration(seconds: 3));\n    return 30;\n}\n\nvoid main() {  \/\/&lt;- 'async' is not necessary here\n    var t1 = DateTime.now();\n    Future.wait([async1(), async2(), async3()])\n          .then((List&lt;int> nums) {\n              var t2 = DateTime.now();\n              var sum = nums.reduce((curr, next) => curr + next);\n              print('sum = $sum');\n              print('delta = ${t2.difference(t1)}');  \n              \/\/ should be 3, not 6\n          });  \n}<\/code><\/pre>\n\n\n\n<p>\ud504\ub85c\uadf8\ub7a8\uc740 3\uac1c\uc758 \ube44\ub3d9\uae30 \ud568\uc218\ub97c wait \uba54\uc18c\ub4dc\ub85c \uc218\ud589\ud569\ub2c8\ub2e4. \uac01\uac01\uc740 1\/2\/3\ucd08\uc758 \uc9c0\uc5f0\uc744 \uc900 \ud6c4 \uac01\uac01 \uc815\uc758\ud55c 10\/20\/30\uc744 \ub9ac\ud134\ud558\ub294 \ub9e4\uc6b0 \ub2e8\uc21c\ud55c \ud568\uc218\ub4e4 \uc785\ub2c8\ub2e4. wait \ud568\uc218\ub85c \uc774\ub4e4\uc744 \ub3c5\ub9bd\uc801\uc774\uace0 \ub3d9\uc2dc\uc5d0 \uc218\ud589\ud55c \ud6c4, \ucd5c\ub300\uac12\uc778 3\ucd08 \uc9c0\uc5f0\uc774 \uc9c0\ub098\uba74, \ub9ac\ud134 \uac12\uc744 \ubaa8\ub450 \ub354\ud55c 60\uc744 \ucd9c\ub825\ud558\ub3c4\ub85d \ub9cc\ub4e4\uc5b4\uc9c4 \ud504\ub85c\uadf8\ub7a8\uc785\ub2c8\ub2e4. \ud2b9\ubcc4\ud788 Future.wait()\uc758 \uacb0\uacfc\uc778 \ub9ac\uc2a4\ud2b8\uc5d0 &#8220;.&#8221; \uc5f0\uc0b0\uc790\ub97c \ud1b5\ud574\uc11c then \uad6c\ubb38\uc744 \uc368\uc11c, \ub9ac\ud134\ub41c \ub9ac\uc2a4\ud2b8\uc5d0 anonymous \ud568\uc218\ub97c \uc368\uc11c \uc2dc\uac04 \uacc4\uac04\uacfc \uacb0\uacfc\uc758 \ucd1d\ud569\uc744 \uad6c\ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h4>\ub9c8\ubb34\ub9ac<\/h4>\n\n\n\n<p>Dart \uc5b8\uc5b4\uc758 Built-in library\uc5d0 \ub300\ud574\uc11c \uc124\uba85\uc744 \ud558\uc600\uc2b5\ub2c8\ub2e4. \ud2b9\ubcc4\ud788 \uc790\uc8fc \uc0ac\uc6a9\ud558\uac8c\ub420 File\uacfc Directory\ub97c \uc124\uba85\ud558\uc600\uace0, \ucef4\ud4e8\ud130\uc758 \ud658\uacbd \uc815\ubcf4\ub97c \uc811\uadfc\ud558\ub294 Platform\uc5d0 \ub300\ud574\uc11c\ub3c4 \ub2e4\ub918\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ube44\ub3d9\uae30 \ubaa8\ub4dc\uac00 Dart\uc758 Built-in library\uc5d0\uc11c \uc5b4\ub5bb\uac8c \uc4f0\uc774\ub294\uc9c0\ub97c \uc0b4\ud3b4\ubcf4\uc558\uace0, \uc55e\uc73c\ub85c \ub9e4\uc6b0 \uc790\uc8fc \ub9cc\ub098\uac8c\ub420 Stream\uc5d0 \ub300\ud574\uc11c\ub3c4 \uc54c\uc544\ubcf4\uc558\uc2b5\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; Library and File\/Stream\/Process &gt; Library\ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \ub3c4\uc11c\uad00\uc774\ub77c\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \ub300\uc2e0 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc5d0\uc11c\uc758 \ub3c4\uc11c\uad00\uc774\ub780, \ucc45\uc774 \uc544\ub2cc \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ucf54\ub4dc\ub4e4\uc774 \uc788\ub294 \uac83\uc774\uc9c0\uc694. \uc2e4\uc81c\ub85c \ubb3c\ub9ac\uc801\uc73c\ub85c \uc5b4\ub518\uac00\ub97c \uac04\ub2e4\ub294 \uc758\ubbf8\uac00 \uc544\ub2c8\uace0, 1) &#8230;<\/p>\n","protected":false},"author":1,"featured_media":976,"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\/622"}],"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=622"}],"version-history":[{"count":14,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts\/622\/revisions"}],"predecessor-version":[{"id":977,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts\/622\/revisions\/977"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/media\/976"}],"wp:attachment":[{"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=622"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=622"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}