{"id":1904,"date":"2024-04-07T08:49:26","date_gmt":"2024-04-06T23:49:26","guid":{"rendered":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/?p=1904"},"modified":"2024-04-07T10:30:47","modified_gmt":"2024-04-07T01:30:47","slug":"extension-types-dart3-3","status":"publish","type":"post","link":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/2024\/04\/07\/extension-types-dart3-3\/","title":{"rendered":"Extension Types (#Dart3.3)"},"content":{"rendered":"\n<p>Extension Types\uc5d0 \ub300\ud55c \ub2e4\uc74c \uc124\uba85\uc740<a href=\"https:\/\/dart.dev\/language\/records\">,&nbsp;<\/a><a href=\"https:\/\/dart.dev\/guides\/language\/evolution#changes-in-each-release\" title=\"\">Dart \uacf5\uc2dd \uc0ac\uc774\ud2b8\uc758 \ub0b4\uc6a9(\uc544\ub798\uc758 \ucd9c\ucc98 \ucc38\uc870)<\/a>\uc744 \uae30\ubc18\uc73c\ub85c, \ub3c5\uc790\uc758 \uc774\ud574\ub97c \ub3d5\uae30 \uc704\ud55c \ucd94\uac00\uc801\uc778 \uae00\uc744 \ud3ec\ud568\ud558\uac70\ub098, \ucd9c\ucc98\uc758 \uae00\uc744 \uc218\uc815\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc791\uc131\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>Extension Types\uc740 \ud2b9\uc815 Type A\uc5d0 \ub300\ud55c \uae30\ub2a5 \ud655\uc7a5\uc774 \ud544\uc694\ud558\uc9c0\ub9cc, \uc131\ub2a5 \uc800\ud558\ub97c \ubc14\ub77c\uc9c0 \uc54a\ub294 \ubaa9\uc801\uc5d0\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc544\ub798\uc758 \uc608\uc2dc\ub97c \ubcf4\uba74, int \ud0c0\uc785\uc5d0 \ub300\ud55c Extension Types\uc758 \ub3d9\uc791\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>extension type Wrapper(int i) {\n  void showValue() {\n    print('my value is $i');\n  }\n}\n\nvoid main() {\n  final wrapper = Wrapper(42);\n  wrapper.showValue(); \/\/ Prints 'my value is 42'\n}<\/code><\/pre>\n\n\n\n<p>\uc774 \ucf54\ub4dc\uc758 \uc218\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>my value is 42<\/code><\/pre>\n\n\n\n<p>\ucf54\ub4dc\uc5d0\uc11c extension type\uc740 Wrapper \uc785\ub2c8\ub2e4. main()\ub97c \ubcf4\uba74, \uc77c\ubc18\uc801\uc778 Dart \uc5b8\uc5b4\uc758 \ub370\uc774\ud130 \ud0c0\uc785\uacfc \ub3d9\uc77c\ud558\uac8c \ub3d9\uc791\ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\uc5d0\uc11c\ub294 Wrapper \ud074\ub798\uc2a4\uc758 \uac1d\uccb4\uac00 \uc0dd\uc131\ub418\ub294 \uac83\uc73c\ub85c \ubcf4\uc774\uc9c0\ub9cc, \uc0ac\uc2e4 \ub0b4\ubd80\uc801\uc73c\ub85c \ub9cc\ub4e4\uc5b4\uc9c0\ub294 \uac83\uc740 int \ud074\ub798\uc2a4\uc758 \uac1d\uccb4 \uc785\ub2c8\ub2e4. \uae30\uc874 \uac1d\uccb4\uc758 \uae30\ub2a5\uc744 \ud655\uc7a5 \ud558\uc9c0\ub9cc, \uc774\ub97c \uc704\ud55c \uc131\ub2a5\uc801\uc778 \ubd80\ubd84\uc758 \uc800\ud558\ub294 \uc5c6\ub2e4\uace0 \ud569\ub2c8\ub2e4. \uc989, wrapper\uac00 int\ub97c indirect \ud558\uae30\ub294 \ube44\uc6a9(cost)\uac00 \uc5c6\ub2e4\uace0 \ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, \uae30\uc874 \ud0c0\uc785\uc5d0 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ucd94\uac00\ud568\uacfc \ub3d9\uc2dc\uc5d0, \uae30\uc874 \ud0c0\uc785\uc774 \uc9c1\uc811\uc801\uc73c\ub85c \ub178\ucd9c\ub418\ub294 \uac83\uc744 \ud53c\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc544\ub798\uc758 \uc608\uc2dc\ub97c \ubcf4\uba74, \uae30\uc874 \ud0c0\uc785\uc5d0 \uc0c8\ub85c\uc6b4 \uc774\ub984\uc744 \ubd80\uc5ec\ud55c \ud6c4, \ucd94\uac00\uc801\uc778 \uae30\ub2a5(+)\ub97c \ud3ec\ud568\ud558\ub418, \uae30\uc874 \uae30\ub2a5(isEven)\uc744 \uc5b5\uc81c\ud558\ub294 \ud6a8\uacfc\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>extension type Meters(int value) {\n  String get label =&gt; '${value}m';\n  Meters operator +(Meters other) =&gt; Meters(value + other.value);\n}\n\nvoid main() {\n  var m = Meters(42); \/\/ Has type `Meters`.\n  var m2 = m + m; \/\/ OK, type `Meters`.\n  \/\/ int i = m; \/\/ Compile-time error, wrong type.\n  \/\/ m.isEven; \/\/ Compile-time error, no such member.\n  assert(identical(m, m.value)); \/\/ Succeeds.\n}<\/code><\/pre>\n\n\n\n<p>Meters \ud0c0\uc785\uc774 int \ud074\ub798\uc2a4\uc758 extension type\uc774\uc9c0\ub9cc, int \uac1d\uccb4\uc5d0 Meters \uac1d\uccb4\ub97c \uc800\uc7a5\ud558\ub294 \ud589\uc704\uc640 int \ud074\ub798\uc2a4\uc758 isEven\uc774 Meters\uc5d0\uc11c \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, Meters \ud0c0\uc785\uc740 \uc5ec\uc804\ud788 int \ud0c0\uc785\uacfc \uac19\uc740 \ud0c0\uc785\uc73c\ub85c \uc778\uc2dd\ub418\ub294 \uac83\ub3c4 assert() \uad6c\ubb38\uc744 \ud1b5\ud574\uc11c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>[\ucd9c\ucc98]&nbsp;<a href=\"https:\/\/medium.com\/dartlang\/dart-3-3-325bf2bf6c13\">https:\/\/dart.dev\/language\/patterns<\/a><\/p>\n\n\n\n<p>[\ucd9c\ucc98] <a href=\"https:\/\/dart.dev\/guides\/language\/evolution#changes-in-each-release\">https:\/\/dart.dev\/guides\/language\/evolution#changes-in-each-release<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Extension Types\uc5d0 \ub300\ud55c \ub2e4\uc74c \uc124\uba85\uc740,&nbsp;Dart \uacf5\uc2dd \uc0ac\uc774\ud2b8\uc758 \ub0b4\uc6a9(\uc544\ub798\uc758 \ucd9c\ucc98 \ucc38\uc870)\uc744 \uae30\ubc18\uc73c\ub85c, \ub3c5\uc790\uc758 \uc774\ud574\ub97c \ub3d5\uae30 \uc704\ud55c \ucd94\uac00\uc801\uc778 \uae00\uc744 \ud3ec\ud568\ud558\uac70\ub098, \ucd9c\ucc98\uc758 \uae00\uc744 \uc218\uc815\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc791\uc131\ud558\uc600\uc2b5\ub2c8\ub2e4. Extension Types\uc740 \ud2b9\uc815 Type A\uc5d0 \ub300\ud55c \uae30\ub2a5 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":1748,"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\/1904"}],"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=1904"}],"version-history":[{"count":3,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts\/1904\/revisions"}],"predecessor-version":[{"id":1924,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts\/1904\/revisions\/1924"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/media\/1748"}],"wp:attachment":[{"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=1904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=1904"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=1904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}