๐ฏ ์ค๋์ ์ด๋ ต๊ฒ ๋๊ปด์ง๋ Dart ๋ฌธ๋ฒ์ ๋ํด ์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถํ๋ค.
๊ธฐ์กด์ ๋ค์๋ ๊ฐ์๋ฅผ ์ ์ธํ ๋ค๋ฅธ ํ์ต์ด ํ์ํด์ ๋ค๋ฅธ ๊ฐ์๋ฅผ ์ฐพ์๋ณด๊ณ ์์นญ๋ ํ๋ค.
Dart ๊ธฐ์ด์ ๋ํด ๋ค๋ฃจ๊ณ ์๋ ๊ฐ์์ธ๋ฐ, ์ค๋ช
ํ๋ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ ๊ทธ๋ฐ์ง ๋๋ค๋ฅธ ๋๋์ด๋ค.
๋ณ์, List, Map, ํจ์, return, imports, class ๋ฑ ๋ค์ํ ๊ธฐ์ด ์ง์์ ์์๋ค.
๋ค๋ง, ์์์ ๋ฐฐ์์ ์๋ ๋ด์ฉ์ ์ดํดํ๋ ๋๋์ด๋ผ์, ๋ฐ๋ก TIL์ ์์ฑํ ๋ด์ฉ์ ๋ณ๋ก ์๋ ๊ฒ ๊ฐ๋ค.
์ด๋ก ์ ๊ฐ๊ณ , ํ์ฉ๋ฒ๋ ๋น์ทํ ๋๋์ด๋ผ ํ๋ฒ์ฉ ์ญ ๋ณด๊ณ ์์ธํ ์ดํดํ๊ฑฐ๋, ๋ฆฌ๋ง์ธ๋ํ๋ ๊ฒ์ฒ๋ผ ํ์ตํ๋ค.
์ค์ต์ด๋ ์ค์ ๋ณด๋ค ์์ ๋ฅผ ๋ค๋ฃจ๋ค๋ณด๋ ๋ ์ดํดํ๊ธฐ ํธํ๋ ๊ฒ ๊ฐ๋ค.
List, Mapvoid main(){ var fruits = [๋ธ๊ธฐ, ๋ฐ๋๋, ์๋ฐ]; var fruitsNum = {"๋ธ๊ธฐ: 5", "๋ฐ๋๋: 3", "์๋ฐ:1"}; var total = 0; for(var i = 0; i<fruits.length; i++) { final name = fruits[i]; final cnt = fruitsNum["ํฌ๋"]; // = null if(cnt != null) { //cnt๊ฐ null์ด ์๋ ๋ total = total + cnt; } else { total = total + 0; } } print("๊ฐฏ์ ${total}"); }ย
์ด๋ฐ ์์ผ๋กlength๋ฅผ ์ฌ์ฉํ for๋ฌธ์ ์์๋ก ๋ค์ด ์ค๋ช ํ๋ค.
๋ณดํตvar์ ์ฌ์ฉํ๋ฉด, ์๋์ผ๋ก ํ์ ์ ์ง์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ณ์ํ์ ์ด ์๋var๋ฅผ ์ฌ์ฉํ ๊ฒ ๊ฐ๋ค.
๐ pow ์์
import "dart:math" as math; // num numPow(int numA) { return math.pow(numA, 3); } // void main() { int numA = 3; num total = numPow(numA); print("numA : $numA, total : $total"); } // ์ถ๋ ฅ = numA : 3, total : 27โ
pow๋ ์ ๊ณฑ์ผ๋กnumA : 3, total : 27์ด ์ถ๋ ฅ๋๋ค.
๐กimport "dart:math๋ค์as math๋ฅผ ๋ถ์ด๋ ์ด์ ๋ math.pow์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ ๋ฆฌ ๋ฐ ๊พธ๋ฐ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ตํ๋ฉด์ "์ ', ,์ ;, !=์ == ์ด๋ฐ ํท๊ฐ๋ฆฌ๋ ๊ฒ๋ค์ด๋ ๊ถ๊ธํ ๊ฒ๋ค์ ์์ธํ๊ฒ ์ฐพ์๋ดค๋ค.
$ - printโ print("๊ฐฏ์ $total"); โ print("๊ฐฏ์ ${total}"); โ print("๊ฐฏ์" $total); โ print("๊ฐฏ์" ${total});ย
โ ๋ฌธ์์ด์ ํ๋์ ๋ฌธ์์ด๋ก๋ง ์ด๋ฃจ์ด์ ธ์ผ ํ๋ฉฐ,{}๋ ์๋ต ๊ฐ๋ฅํ๋ค.
๐ก ๋จ,total.length๋ผ๋๊ฐ,.์ด ๋ถ๊ฑฐ๋, ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ ๋,print("๊ฐฏ์ $getTotal()");๋ ๋์์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋์{}๋ก ๊ฐ์ธ์ผํ๋ค.
if๋ฌธ, for๋ฌธ, while๋ฌธ, ํจ์ ์ ์กฐ๊ฑด, ํํ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
โifโ ๊ฐ์ฅ ํํ ์ฌ์ฉ์ฒif (a == 10) { print("a๋ 10์ ๋๋ค."); } if (a != 0) { print("a๋ 0์ด ์๋๋๋ค."); }
โ
forโ ์กฐ๊ฑด์์ ์ฌ์ฉfor (int i = 0; i != 5; i++) { print(i); // i๊ฐ 0๋ถํฐ 4๊น์ง ์ถ๋ ฅ๋จ }โ ๋ณดํต์
i < 5๋ก ์ฐ์ง๋ง i != 5๋ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
โ
whileโ ๋ฐ๋ณต ์กฐ๊ฑด์์ ์ฌ์ฉwhile (input != "exit") { // ๊ณ์ ์ ๋ ฅ ๋ฐ๊ธฐ }
โ ์ผํญ ์ฐ์ฐ์ โ ์กฐ๊ฑด์ ์์์
String result = (score == 100) ? "Perfect!" : "Try again!";
โ ๋ ผ๋ฆฌ ์ฐ์ฐ์์ ํจ๊ป๋ ์์ฃผ ์ฌ์ฉ
if (x != 0 && y == 3) { print("์กฐ๊ฑด ์ถฉ์กฑ!"); }
โ ๊ธฐ๋ณธ ๊ตฌ์กฐ
์กฐ๊ฑด์ ? ์ฐธ์ผ ๋ ๊ฐ : ๊ฑฐ์ง์ผ ๋ ๊ฐ;int score = 90; //์์ String result = (score >= 90) ? "ํฉ๊ฒฉ" : "๋ถํฉ๊ฒฉ"; print(result); // ์ถ๋ ฅ: ํฉ๊ฒฉโ
(score >= 90)๊ฐtrueโ "ํฉ๊ฒฉ"
โscore๊ฐ80์ด์๋ค๋ฉด โ "๋ถํฉ๊ฒฉ"์ด ์ถ๋ ฅ๋๋ค.
โก
if-else, ์ผํญ ์ฐ์ฐ์ ๋น๊ต// ์ผ๋ฐ if-else if (score >= 90) { result = "ํฉ๊ฒฉ"; } else { result = "๋ถํฉ๊ฒฉ"; }// ์ผํญ ์ฐ์ฐ์ result = (score >= 90) ? "ํฉ๊ฒฉ" : "๋ถํฉ๊ฒฉ";โ ์ด๋ฐ์์ผ๋ก ๊ฐ๋จํ ์กฐ๊ฑด ์ฒ๋ฆฌ์ ์ ์ฉํ๋ค.
๐ ์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฑด์ ๋์์ ์ฒดํฌํ ๋ ์ฌ์ฉํ๋ ์ฐ์ฐ์
โ
&&- AND ์ฐ์ฐ์(๋ ๋ค ์ฐธ์ด์ด์ผ ํจ)int age = 25; bool hasID = true; // if (age >= 20 && hasID) { print("์ ์ฅ ๊ฐ๋ฅ"); }โ
age 20์ด์ +ID๋ ์์ผ๋ฉด โ "์ ์ฅ ๊ฐ๋ฅ"
โ ํ๋๋ผ๋ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ฉด โ
โ
||- ๋๋bool isAdmin = false; bool isOwner = true; // if (isAdmin || isOwner) { print("์ ๊ทผ ํ์ฉ"); }โ ๊ด๋ฆฌ์์ด๊ฑฐ๋ ์์ ์๋ฉด โ "์ ๊ทผ ํ์ฉ"
โ ๋ ์ค ํ๋๋ง ์ฐธ์ด์ด๋ โญ
โ
!- NOT ์ฐ์ฐ์(๋ฐ๋๊ฐ์ผ๋ก ๋ฐ๊ฟ)bool isLoggedIn = false; // if (!isLoggedIn) { print("๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค"); }โ
!isLoggedInโfalse์ ๋ฐ๋ โtrue
โ๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค์ถ๋ ฅ
โก !
! ๋ถ์ ์ด ํท๊ฐ๋ ค์ ์กฐ๊ธ ๋ ์์๋ ์ค๋ช
์ ์ดํด๋ณด์๋ค.
๐ ์์: ๋ฐฐ๊ณ ํ
isHungrybool isHungry = true; // if (isHungry) { print("๋ฐฅ ๋จน์!"); } if (!isHungry) { print("๋ฐฐ ์ ๊ณ ํ์"); }
๋ณ์๊ฐ isHungry!isHungry์คํ๋๋ ์ฝ๋ true(๋ฐฐ๊ณ ํ)truefalse"๋ฐฅ ๋จน์!"์ถ๋ ฅfalse(์ ๊ณ ํ)falsetrue"๋ฐฐ ์ ๊ณ ํ์"์ถ๋ ฅโ isHungry๋ "๋ฐฐ๊ณ ํ ์ํ์ธ๊ฐ?"
โ !isHungry๋ "๋ฐฐ ์ ๊ณ ํ๊ฐ?"
์ฌ๊ธฐ๊น์ง๋ ์ฝ๊ฒ ์ดํด๋ฅผ ํ๋๋ฐ...
๐ฎ ์์: ๊ฒ์ ์์ ์ฌ๋ถ
isGameStartedbool isGameStarted = false; // if (!isGameStarted) { print("๊ฒ์์ ์์ํ์ธ์"); } else { print("๊ฒ์ ์งํ ์ค์ ๋๋ค"); }โ
isGameStarted๋false
ย ย โ!isGameStarted๋true
ย ย โ ์ถ๋ ฅ:๊ฒ์์ ์์ํ์ธ์
๐กisGameStarted= ๊ฒ์์์์ํ
ย ย!isGameStarted= ๊ฒ์์ข ๋ฃ์ํ
ย ย ์ด๋ฐ์์ผ๋ก๋์ฌ๊ฐ ์๋์ํ์true/false๊ฐ์ ์ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.
isLoggedIn ์ด๋ ์ด ์์๊ฐ ๋ถ์ ์ ๋ถ์ ์ด๋ผ์ ๋์ฌ์ ๋์ฌ๋ก ์๊ฐ์ ํด์ ์ดํดํ๊ธฐ ์ด๋ ค์ ์๋ค.
โ 1. ์ผํญ ์ฐ์ฐ์์์
?
โ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ ์ ํํ ๋ ์ฌ์ฉint score = 85; String result = (score >= 90) ? "A" : "B"; print(result); // "B"โ ๊ตฌ์กฐ :
์กฐ๊ฑด์ ? ์ฐธ์ผ ๋ ๊ฐ : ๊ฑฐ์ง์ผ ๋ ๊ฐ
โ ์ฌ๊ธฐ์ ?๋ "์ด ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด?" ์ด๋ ๋ป
โ 2. nullable ๋ณ์ ์ ์ธ์์์
?
โ ์ด ๋ณ์์null์ด ๋ค์ด๊ฐ ์ ์๋ค๊ณ ํ์ํ ๋String? name; // name์ null์ด ๋ ์ ์์ name = null; // ๊ฐ๋ฅ name = "ํ๊ธธ๋"; // ๊ฐ๋ฅโ
String? nameโnull๊ฐ๋ฅโญ
โString nameโnullโ
โ Dart์ null safety ๊ธฐ๋ฅ
โ 3. null-aware ์ฐ์ฐ์(
?.,??,??=๋ฑ)
๐?.โnull์ด๋ฉด ํจ์ ํธ์ถ โString? name = null; print(name?.length); // null (์๋ฌ ์ ๋จ!)โ
name์ดnull์ด ์๋๋ฉด.length์คํ
โnull์ด๋ฉด,null๋ฐํ
๐
??โnull์ด๋ฉด ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉString? name = null; print(name ?? "์ด๋ฆ ์์"); // "์ด๋ฆ ์์"
๐
??=โnull์ผ ๋๋ง ๊ฐ์ ํ ๋นString? name; name ??= "๊ธฐ๋ณธ ์ด๋ฆ"; print(name); // "๊ธฐ๋ณธ ์ด๋ฆ"
๐ ? ์ฉ๋๋ณ ์ ๋ฆฌํ
๋ฌธ๋งฅ / ์์น ์์ ์ด๋ฆ (์ ์ ๋ช ์นญ) ์ค๋ช ์กฐ๊ฑด๋ฌธ (์กฐ๊ฑด์) ์กฐ๊ฑด ? ์ฐธ๊ฐ : ๊ฑฐ์ง๊ฐ์ผํญ ์ฐ์ฐ์ (ternary operator) ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ ๊ฐ ์ค ํ๋ ์ ํ ํ์ ๋ค์ ๋ถ์ String? namenullable ํ์ null ๊ฐ์ ํ์ฉํ๋ ๋ณ์ ๋ฉ์๋ ํธ์ถ ์์ ๋ถ์ user?.namenull-aware ์ ๊ทผ ์ฐ์ฐ์ null์ด๋ฉด ์ ๊ทผํ์ง ์๊ณ ๋์ด๊ฐ ๊ธฐ๋ณธ๊ฐ ์ง์ a ?? bnull ๋ณํฉ ์ฐ์ฐ์ (null coalescing operator) null์ผ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ ๊ฐ ์ฌ์ฉ null์ผ ๋ ํ ๋น a ??= 10null ๋ณํฉ ํ ๋น ์ฐ์ฐ์ null์ผ ๋๋ง ๊ฐ์ ํ ๋น
์ ๋ฆฌํ์ธ๋ฐ ๊ตฌ์ฒด์ ์ธ ๋ช
์นญ์ด๋ ์ด๋ฆ์ ์์ง ์ธ์ฐ๊ธฐ๋ ์ด๋ ต๊ณ ์ฒ์ฒํ ์ ํ๋ฉด์ ์ตํ์ผํ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ?์ ์ฉ๋๊ฐ null์์ ์ฐ์ด๊ธฐ ๋๋ฌธ์ ์ ๊ตฌ๋ถํด์ผ ํ ๊ฒ์ด๋ค.
โ null-safe ์์
List<String?> names = ["์ฒ ์", null, "์ํฌ"]; // for (var name in names) { if (name == null) { print("์ด๋ฆ์ด ์์ต๋๋ค."); } else { print("์ด๋ฆ: $name"); } }for (var name in names) { // ์ด๋ฆ(name)์ ํ๋์ฉ ๊บผ๋ด์ ์ฌ๊ธฐ์ ์ฌ์ฉ }โ
var name๋ณ์๋ฅผ ์ ์ธํ๊ณ ,in names์ฆ,names๋ผ๋ ๋ฆฌ์คํธ์ ์์๋ฅผ ํ๋์ฉ ๋ฐ๋ณตํ๊ฒ ๋ค๋ ๋ป์ด๋ค.
for (String name in names) { print(name); }โ
var๋์ ์ ํ์ ์ ๋ช ์ํ ์๋ ์๋ค.
๐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ import ์ ์ฃผ์์ฌํญ
import 'dart:math' as math; import 'dart:game_engine' as GE; // ์์๋ก ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ // math.min(); //math ์ min GE.min(); // ๊ฒ์ ์์ง์ min๐ก ์์๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํ ๋ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์ฝ๋๊ฐ ์์ ์ ์๋ค. ๊ทธ๋์ ๋ณดํต
importํ๊ณ ๋ค์ ์์๋ก ์ด๋ฆ์ ๋ถ์ฌ์,math.min();,math.pow();์ด๋ฐ์์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
โ ๋จ, ๋๋ฌด ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ ์คํ๋ ค ์ฝ๋๋ฅผ ๋ณด๊ธฐ ๋ถํธํด์ง๋ค.
โ ๊ธฐ๋ณธ ์ํ ํจ์
ํจ์ ์ค๋ช ์์ pow(x, y)๊ฑฐ๋ญ์ ๊ณฑ (x์ y์ ๊ณฑ) pow(2, 3) โ 8sqrt(x)์ ๊ณฑ๊ทผ (๋ฃจํธ) sqrt(9) โ 3.0abs(x)์ ๋๊ฐ abs(-5) โ 5max(a, b)๋ ํฐ ๊ฐ max(3, 7) โ 7min(a, b)๋ ์์ ๊ฐ min(3, 7) โ 3round()๋ฐ์ฌ๋ฆผ 3.6.round() โ 4floor()๋ด๋ฆผ (์์ ์ ์) 3.9.floor() โ 3ceil()์ฌ๋ฆผ (ํฐ ์ ์) 3.1.ceil() โ 4truncate()์์์ ์๋ผ๋ด๊ธฐ (0์ชฝ์ผ๋ก ์๋ฆ) 3.9.truncate() โ 3โ ํผํ๊ณ ๋ผ์ค ์ ๋ฆฌ
โ(aยฒ + bยฒ)โsqrt(pow(a, 2) + pow(b, 2))
โ ์ผ๊ฐ ํจ์
ํจ์ ์ค๋ช ์์ (๋ผ๋์ ์ฌ์ฉ) sin(x)์ฌ์ธ sin(pi / 2) โ 1.0cos(x)์ฝ์ฌ์ธ cos(0) โ 1.0tan(x)ํ์ ํธ tan(pi / 4) โ ์ฝ 1.0asin(x)์ํฌ ์ฌ์ธ (์ญ์ฌ์ธ) asin(1) โ pi / 2acos(x)์ํฌ ์ฝ์ฌ์ธ acos(0) โ pi / 2atan(x)์ํฌ ํ์ ํธ atan(1) โ pi / 4
โ ๋๋ค ๊ด๋ จ
import 'dart:math'; final random = Random();
์ฝ๋ ์ค๋ช random.nextInt(n)0 ์ด์ n ๋ฏธ๋ง์ ์ ์ ๋ฐํ random.nextDouble()0.0 ์ด์ 1.0 ๋ฏธ๋ง์ ์ค์ random.nextBool()true ๋๋ false ์ค ๋๋ค ๋ฐํ
โ ์์ ๊ฐ
์์ ์ค๋ช ์์ pi์์ฃผ์จ (3.14159...) pi * r * re์์ฐ๋ก๊ทธ ๋ฐ์ (2.718...) ์ง์ ํจ์ ๊ณ์ฐ์ ์ฌ์ฉ โ ์ ๋์ด ๊ณต์
ฯrยฒโpi * pow(r, 2)
โ๏ธ ์์ ์ฝ๋
import 'dart:math'; // void main() { print(pow(2, 5)); // 32 print(sqrt(16)); // 4.0 print(sin(pi / 2)); // 1.0 print(max(3, 9)); // 9 print(random.nextInt(10)); // 0~9 ์ค ๋๋ค ์ซ์ }
๋์ถฉ ์ด๋ฐ ์์ธ๋ฐ ๊ตณ์ด ์ธ์ฐ๊ฑฐ๋ ํ ํ์๋ ์์ด๋ณด์ด๊ณ , ๊ธฐ๋ณธ ์ํ ํจ์์ ๋๋ง ๋ง์ด ์ฐ์ด์ง ์์๊น ์ถ๋ค. ํน์ ๊ฐ๋ฐํ๋ ๋ถ์ผ์ ๋ฐ๋ผ ๋๋ ๊ฒ ๊ฐ๋ค.
๐ฏ Dart์ main()์ ๋ฐ๋์ void ๋๋ Future<void>์ฌ์ผ ํ๋ค.
ํ์ ์๋ฏธ void์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋ ํจ์๋ฅผ ์๋ฏธ( return;์ ๊ฐ๋ฅํ์ง๋งreturn ๊ฐ;์ ๋ถ๊ฐ๋ฅ)Future<T>๋น๋๊ธฐ์ ์ผ๋ก T ํ์ ๊ฐ์ ๋ฐํํ๋ ํจ์๋ฅผ ์๋ฏธ (์: Future<String>)Future<void>๋น๋๊ธฐ ํจ์์ง๋ง ๋ฐํ๊ฐ์ ์์์ ์๋ฏธ( await๋ ๊ฐ๋ฅ,return ๊ฐ;์ ์๋จ)
โ
void main()
๐ ํ์void main() { // ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ ์ฝ๋ }๐ ํน์ง
โ main() ํจ์๊ฐ ์ฆ์ ์คํ๋๋ค.
โ await ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
โ ๋ณดํต ๊ฐ๋จํ ์ฝ๋์ ์ฌ์ฉํ๋ค.
โ
Future<void> main()
๐ ํ์Future<void> main() async { await //๋น๋๊ธฐ ์ฝ๋๋ฅผ ์คํํ ์ ์์ }๐ ํน์ง
โ await ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ ๋น๋๊ธฐ ์์ ์ ๊ธฐ๋ค๋ฆด ์ ์๋ค.
โ ๋น๋๊ธฐ ํจ์์ด์ง๋ง ๋ฐํ๊ฐ์ void์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ฐํํ ์๋ ์๋ค.
โ ๋คํธ์ํฌ ์์ฒญ, ํ์ผ ์ฝ๊ธฐ, ํ์ด๋จธ ๋ฑ ๋น๋๊ธฐ ์์ ์ด ํ์ํ ๋ ์ฌ์ฉํ๋ค.
โ ์ธ์
async์await๋ฅผ ๊ผญ ๊ฐ์ด ์จ์ผ ํ๋๊ฐ?
๐กawait๋ฅผ ์ฐ๋ ค๋ฉด ๋ฐ๋์ ํจ์์async๊ฐ ์์ด์ผ ํ๋ค.void main() async { await Future.delayed(Duration(seconds: 1)); print('1์ด ํ ์ถ๋ ฅ'); }โ ์ฌ๊ธฐ์
await๊ฐ ์์ผ๋๊นmain()์async๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
โ ๋ฐ๋๋ก
async๋ง ์ฐ๊ณawait๋ฅผ ์ฐ๋ ๊ฒฝ์ฐFuture<void> fetchData() async { // await ์์ด๋ async ํจ์๋ ์ ํจํจ print('๋ฐ์ดํฐ ์์ฒญ'); }โ ๋ค๋ง ์ด๋ฌ๋ฉด
Future<void>๋ฅผ ๋ฆฌํดํ๋ ํจ์๊ฐ ๋ ๋ฟ, ๋น๋๊ธฐ ์์ ์ ์ํ๋ ์ ์ด๋ค.
โ ๏ธ ์ฃผ์:
async์์ด๋Future๋ ์ฌ์ฉ ๊ฐ๋ฅ
Future<void> doSomething() { return Future.delayed(Duration(seconds: 1), () { print('์์ ์๋ฃ'); }); }โ
async์await์์ด๋ ์ ์์ ์ผ๋ก ๋น๋๊ธฐ ์๋ํ๋ค.
โ ์ฝ๋ฐฑ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ผญasync/await๊ฐ ํ์ํ ๊ฑด ์๋๋ค.
โ๏ธ ์ ๋ฆฌ
ํค์๋ ์ญํ asyncํจ์๋ฅผ ๋น๋๊ธฐ ํจ์๋ก ์ ์ await๋น๋๊ธฐ ํจ์๋ Future์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆผ
์ํฉ ํ์ ์ฌ๋ถ await์ฌ์ฉโ ํจ์์ asyncํ์ํจ์์ async๋ง ์๊ณawait์์โ ๊ฐ๋ฅ (์๋ฌ ์๋) async/await์์ดFuture์ฌ์ฉโ ๊ฐ๋ฅ (์ฝ๋ฐฑ ๊ธฐ๋ฐ ์ฌ์ฉ) await์์ดasync๋ง ์ฌ์ฉโ ๏ธ ๊ฐ๋ฅํ์ง๋ง ๋น๋๊ธฐ ์๋ ์ํจ
๐ ์์
โ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉvoid main() { print('์์'); return; // ๋ฌธ์ ์์ }ย
โ ์ค๋ฅ ๋ฐ์void main() { return 1; // โ ์ค๋ฅ: void ํจ์์์ ๊ฐ์ ๋ฐํํ ์ ์์ }โ
void main()์์์๋return;๋ง ์ธ ์ ์๋ค.return ๊ฐ;์ ์ค๋ฅ๋๋ค.
โก ๊ฐ์ ๋ฐํํ๊ณ ์ถ๋ค๋ฉด?
โ ํด๊ฒฐ์ฑ 1:
exitCode๋ฅผ ์ฌ์ฉ(ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ ์ฝ๋ ์ ๋ฌ)
dart:io๋ผ์ด๋ธ๋ฌ๋ฆฌ์exitCode๋ฅผ ์ฌ์ฉํด์ ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ํ๋ฅผ ์ธ๋ถ๋ก ์ ๋ฌํ ์ ์๋ค.import 'dart:io'; // void main() { if (someErrorOccurred()) { exitCode = 1; // ์ค๋ฅ๋ฅผ ๋ํ๋ } else { exitCode = 0; // ์ ์ ์ข ๋ฃ } }โ ์์ด๋ CI ํด์ ์ด
exitCode๋ฅผ ์ฝ์ ์ ์๋ค.
โ ์ผ์ข ์ "๋ฐํ๊ฐ"์ฒ๋ผ ํ์ฉ๋๋ค.
โ ํด๊ฒฐ์ฑ 2:
return๋์ ์ถ๋ ฅ(print())๋ ๋ก๊ทธ๋ก ์ ๋ฌ
๋ง์ฝ ์ฌ์ฉ์๋ ์์คํ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ ์ถ๋ค๋ฉด,print()๋ฅผ ์ฐ๋ ๊ฒ ์ผ๋ฐ์ ์ด๋ค.void main() { var result = computeSomething(); print(result); // ์ฌ์ฉ์๋ ์ธ๋ถ์์ ์ด ์ถ๋ ฅ์ ํ์ฉ ๊ฐ๋ฅ }
โ ํด๊ฒฐ์ฑ 3: ์ค์ ๋ก์ง์ ํจ์์ ๋ฃ๊ณ
main()์ ํธ์ถ๋ง
main()์ ์ฌ์ ํvoid์ง๋ง, ๋ก์ง์ ๋ฐํ๊ฐ ์๋ ํจ์๋ก ๋ถ๋ฆฌํ๋ฉด ๋๋ค.int calculateSomething() { return 42; } // void main() { int result = calculateSomething(); print('Result is $result'); }
๋ชฉ์ ๋ฐฉ๋ฒ ์์ ํ๋ก๊ทธ๋จ ์ํ ๋ฐํ exitCode์ฌ์ฉexitCode = 1;๊ณ์ฐ ๊ฒฐ๊ณผ ๋ณด์ฌ์ฃผ๊ธฐ print()๋๋ ๋ก๊ทธ ์ฌ์ฉprint(result);์ฝ๋ ๋ด๋ถ ๋ฐํ ์ฒ๋ฆฌ ๋ฐํ๊ฐ ์๋ ํจ์ ๋ฐ๋ก ์ ์ int compute() => 42;main()์์ ์ง์ ๋ฐํ โDart ์ธ์ด์ ๋ถ๊ฐ๋ฅ
๐ฑ ์ค๋์ ์๋ก์ด ๊ฐ์๋ ๋ค์ด๋ณด๊ณ , ๊ถ๊ธํ ๊ฒ์ ๋ํด์ ๊ฐ์ธ ํ์ตํ๋ ์๊ฐ์ ๊ฐ์ก๋ค.
๋๋ถ์ ๊ถ๊ธํ ์ ์ด๋, ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด ์ผ๋ถ ํด์๋ ๋๋์ด๋ค.
์ฝ๋ฉ ๊ณต๋ถ๊ฐ ๋์ด ์๋ค๊ณ ๋๊ปด์ง๋ ๊ฒ์ ํ๊ฐ์ง ์ฝ๋๋ ๋ฌธ๋ฒ์ ์๋ฉด, ์ด๋ฐ ๋ฐฉ์์ ๋๋์ง ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง๊ฐ ๊ถ๊ธํ๊ณ , ๊ถ๊ธ์ฆ์ ํด์ํ๊ณ ๋๋ฉด ๊ทธ ํจ์์ ๋ํด ์๋ฌธ์ ์ด ์๊ธฐ๊ณ ...
๊ถ๊ธ์ฆ์ด ์๊ธฐ๋ฉด ์ดํดํ๊ณ ๋์ด๊ฐ๊ณ ์ถ๊ณ , ์๋ฌธ์ ํด์ํ๊ณ ์ถ์ด์ ์ด๊ฒ์ ๊ฒ ๋ง์ด ํ์ตํ ๊ฒ ๊ฐ๋ค.
๋ค๋ง, ๋๋ฌด ์ฐพ์๋ณธ ๊ฒ์ด ๋ง์์ ํท๊ฐ๋ฆฌ๊ฑฐ๋ ๊ธฐ์ต ์์์ ์ํ์ง๋ฉด ์ด์ฉ๋ ์ถ์ง๋ง, TIL์ ์์ฑํ๋ฉฐ ๋ค์ ํ๋ฒ ๋ ๋ณต์ตํ๋ ๋๋์ด๋ค.
๊ทธ๋๋ ์ดํดํ๋ฉด์ ํ์ตํ๋ฉด ๋ค์์ ๊ฐ์ ์ฝ๋๋ฅผ ๋ดค์ ๋ ์ ์ ๋ดค๋ ๊ฒ์ธ๊ฒ ์๊ฐ๋๊ณ , ๊ทธ๋ฌ๋ค ๋ณด๋ฉด ๊ทธ ๊ธฐ๋ฅ๋ ์ผ์ถ ๋ ์ฌ๋ผ์ ๋ฟ๋ฏํ๊ณ ์ข์ ๊ฒ ๊ฐ๋ค.
๋ด์ผ์ ๋ ์ด๋ค ๊ณต๋ถ๋ฅผ ํ ์ง ๊ณ ๋ฏผ๋๋๋ฐ, 2์์ Flutter ๋ก๋๋งต ์ธ์ ํน๊ฐ์ด ํ๋๊ฐ ์์ด์ ๋๋๊ณ ๋๋ฉด ๊ทธ์ ๋ํด ๊ณต๋ถํ์ง ์์๊น ์ถ๋ค.
๐ ํน์ ๋ค๋ฅธ ๊ฐ์๋ฅผ ์ฐพ์๋ณด๋ฉด์ ๋๋ค๋ฅธ ํ์ต์ ํ์ง ์์๊น..!