{"id":532,"date":"2020-06-08T09:00:33","date_gmt":"2020-06-08T00:00:33","guid":{"rendered":"http:\/\/mobilelab.khu.ac.kr\/?p=532"},"modified":"2020-04-05T19:00:09","modified_gmt":"2020-04-05T10:00:09","slug":"be-dart-programmer-21","status":"publish","type":"post","link":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/2020\/06\/08\/be-dart-programmer-21\/","title":{"rendered":"Dart Programmer \ub418\uae30 [21]"},"content":{"rendered":"\n<h4>&lt; Dart \uae30\ucd08\ubb38\ubc95 &#8211; Making Class &#8211; Part.2 &gt;<\/h4>\n\n\n\n<p>\uc55e\uc11c\uc758 \uae00\uc744 \ud1b5\ud574\uc11c \uae30\ubcf8\uc801\uc778 \ud074\ub798\uc2a4\uc758 \uac1c\ubc1c\uacfc subclass \uac1c\ubc1c\uc744 \ud559\uc2b5\ud558\uc600\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc740 \ud6c4\ubc18\ubd80\uc5d0 \ud574\ub2f9\ud558\ub294 \uae00\ub85c\uc368, \uc55e\uc11c \uac1c\ubc1c\ud55c Point\uc640 ColorPoint \ud074\ub798\uc2a4\ub97c \uadf8\ub300\ub85c \uc0ac\uc6a9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4. \uc774\ub7f0 \uac1c\ub150\uc744 \uc7ac\uc0ac\uc6a9(reuse)\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4. \ud558\ub098\uc758 \ud504\ub85c\uadf8\ub7a8\uc774 \uacc4\uc18d \uae38\uc5b4\uc9c0\ub294 \uac83\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud558\uc5ec, \ub9cc\ub4e4\uc5b4 \ub193\uc740 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud560 Point\uc640 ColorPoint\uc758 \uc18c\uc2a4 \ucf54\ub4dc\ub9cc \uc544\ub798\uc758 darttutorial-21-00.dart \ucc98\ub7fc \ubd84\ub9ac\ud558\uaca0\uc2b5\ub2c8\ub2e4. main()\uc774 \uc5c6\uae30\uc5d0 \uc790\uccb4\uc801\uc73c\ub85c \uc2e4\ud589\uc740 \ubd88\uac00\ud558\uba70, \uc774\ud6c4 darttutorial-21-01.dart\uc5d0\uc11c \uc7ac\ud65c\uc6a9\ud560 \uacc4\ud68d\uc785\ub2c8\ub2e4. <\/p>\n\n\n\n<pre>\/\/ darttutorial-21-00.dart \n\n\/\/ Library for sqrt function inclusion\nimport 'dart:math';\n\nclass Point {\n  \/\/ Instance Variables\n  var x;\n  var y;\n\n  \/\/ Constructor with optional and default parameters\n  Point([var numX = 0, var numY = 0]) {\n    this.x = numX;\n    this.y = numY;\n  }\n\n  \/\/ COnstructor with Class-Name.Identifier-Name\n  Point.fromPoint(Point origin) {\n    this.x = origin.x;\n    this.y = origin.y;\n  }\n\n  \/\/ Instance method to calculate distance\n  num distanceTo(Point other) {\n    var dx = this.x - other.y;\n    var dy = this.y - other.y;\n    return sqrt(dx * dx + dy * dy);\n  }\n\n  \/\/ Getter\n  String get stringify =&gt; \"(${this.x},${this.y})\";\n\n  \/\/ Setter\n  set increaseX(num value) =&gt; this.x += value;\n  set increaseY(num value) =&gt; this.y += value; \n}\n\nclass ColorPoint extends Point {\n  \/\/ Instance Variables\n  int red;\n  int green;\n  int blue;\n\n  \/\/ Constructor with optional and default parameters\n  ColorPoint([int r = 0, int g = 0, int b = 0, int x = 0, int y = 0]) : super(x, y) {\n    this.red = r;\n    this.green = g;\n    this.blue = b;\n  }\n\n  \/\/ Getter\n  @override\n  String get stringify =&gt; \"${super.stringify} with (${this.red},${this.green},${this.red})\";\n\n  \/\/ Overriding generic operators\n  ColorPoint operator +(ColorPoint p) =&gt; ColorPoint(255, 255, 255, this.x + p.x, this.y + p.y);\n}\n<\/pre>\n\n\n\n<p>\uc6d0\ub798 \uc774\ub7f0 \ud654\uc77c\uc758 \uc774\ub984\uc740 Point.dart \ud639\uc740 ColorPoint.dart \ub4f1\uc73c\ub85c, \uc720\uc758\ubbf8\ud55c \uc774\ub984\uc744 \uc368\uc57c \uaca0\uc9c0\ub9cc, \uc77c\ub2e8\uc740 \ubb38\ubc95\uc744 \uacf5\ubd80\ud558\ub294 \uc785\uc7a5\uc5d0\uc11c \uc21c\ucc28\uc801\uc778 \uc758\ubbf8\uc758 \ud654\uc77c \uc774\ub984\uc744 \uc720\uc9c0\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74, \uc7ac\ud65c\uc6a9\ud55c\ub2e4\ub294 \uc758\ubbf8\ub294 \ubb34\uc5c7\uc778\uc9c0 \uc0b4\ud3b4\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. \uc544\ub798\uc758 darttutorial-21-01.dart \ud504\ub85c\uadf8\ub7a8\uc740 \uc55e\uc11c\uc758 darttutorial-21-00.dart \ud504\ub85c\uadf8\ub7a8\uc744 \uc7ac\ud65c\uc6a9\ud558\ub294\ub370, \uc774\uc5d0 \ud574\ub2f9\ud558\ub294 \uad6c\ubb38\uc774 import &#8216;darttutorial-21-00.dart&#8217;; \uc785\ub2c8\ub2e4. import \uba85\ub839\uc740 \ud5a5\ud6c4 Library\uc5d0\uc11c \ud559\uc2b5\ud560 \ub0b4\uc6a9\uc73c\ub85c\uc11c, \uc774\ubbf8 \ub9cc\ub4e4\uc5b4\uc9c4 \ud504\ub85c\uadf8\ub7a8\uc744 \ubcc4\ub3c4\uc758 \uac1c\ubc1c\uc5c6\uc774 \uc7ac\uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. \uc774\ud6c4\uc5d0 Point\/ColorPoint \ud074\ub798\uc2a4 \uc18c\uc2a4 \ud504\ub85c\uadf8\ub7a8\uc774 \uc800\uc7a5\ub41c \ud654\uc77c \uc774\ub984\uc774 \uc4f0\uc5ec\uc838 \uc788\uae30\uc5d0, \uc758\ubbf8\uc801\uc73c\ub85c darttutorial-21-00.dart\uc744 \uc77d\uc5b4 \uc2e4\ud589 \uac00\ub2a5\ud558\ub3c4\ub85d \uc900\ube44\ud558\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. \uacb0\ub860\uc801\uc73c\ub85c Point\/ColorPoint\ub294 \uc218\uc815 \uc5c6\uc774 \uc7ac\ud65c\uc6a9\ud560 \uac83\uc774\uae30\uc5d0, \uc0c8\ub86d\uac8c \uc791\uc131\ud560 \ubd80\ubd84\uc5d0 \uc880 \ub354 \uc9d1\uc911\uc744 \ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc744 \ub290\ub084\uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>\/\/ darttutorial-21-01.dart \n\n\/\/ Library for Point and ColorPoint classes\nimport 'darttutorial-21-00.dart';\n\nvoid main() {\n  var pPoint1 = Point();\n  var cPoint1 = ColorPoint();\n  \/\/ output: [01]$ pPoint1:(0,0), cPoint1:(0,0) with (0,0,0)\n  print(\"[01]\\$ pPoint1:${pPoint1.stringify}, cPoint1:${cPoint1.stringify}\");\n}\n<\/pre>\n\n\n\n<p>\uc774\uc81c darttutorial-21-01.dart \ud504\ub85c\uadf8\ub7a8\uc5d0 \uc544\ub798\uc758 \uc0c8\ub86d\uac8c \ubc30\uc6b8 \ubb38\ubc95\ub4e4\uc744 \uc801\uc6a9\ud574 \ubcf4\uba74\uc11c, \uc0c8\ub85c\uc6b4 \ubb38\ubc95\uc5d0 \uc9d1\uc911\ud558\uc5ec \ud504\ub85c\uadf8\ub7a8\uc744 \ud655\uc7a5\ud574 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<ul><li>Mixins for Multiple Inheritance (<em>with<\/em> Syntax)<\/li><li>Implicit Interfaces (<em>implements<\/em> Syntax)<\/li><li>Abstract Methods and Classes<\/li><li>Extension Methods<\/li><li>Class Variables and Methods (<em>Static<\/em> Syntax)<\/li><\/ul>\n\n\n\n<h4>Mixins for Multiple Inheritance (<em>with<\/em> Syntax)<\/h4>\n\n\n\n<p>Dart \uc5b8\uc5b4\ub294 subclass\uc758 super class\ub97c \ud558\ub098\ub85c \uc81c\ud55c\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ud558\ub2e4\ubcf4\uba74, \ubcf5\uc218\uc758 Class\uc758 \uae30\ub2a5\uc744 \ubaa8\uc544\uc11c subclass\uc5d0 \ub123\uc73c\uba74 \uc88b\uc744\ub54c\uac00 \ub098\uc635\ub2c8\ub2e4. \uc774\ub97c \uc704\ud55c \ubb38\ubc95\uc774 mixins \uae30\ub2a5\uc73c\ub85c \ubb38\ubc95\uc740 <em>with<\/em> \uc785\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uba74, \uc55e\uc11c\uc5d0\uc11c \ub9cc\ub4e0 ColorPoint\uc5d0 \ucd94\uac00\uc801\uc73c\ub85c \ud654\uba74\uc5d0 \ucd9c\ub825\uc744 \ud560\uc9c0 \ub9d0\uc9c0\ub97c flag\ub97c \ub450\uc5b4\uc11c \uad00\ub9ac\ud558\uace0 \uc2f6\uc744\ub54c, \uc774\ubbf8 \uc774\ub7f0 \uae30\ub2a5\uc744 \uac00\uc9c4 ActivatationFlag\ub77c\ub294 \uc77c\uc885\uc758 Class\uac00 \uc788\ub2e4\uace0 \ud569\uc2dc\ub2e4. \uadf8\ub7ec\uba74, \ud654\uba74\uc5d0 \ucd9c\ub825\uc744 \ud560 \uc815\ubcf4\ub97c \uad00\ub9ac\ud558\ub294 ColorPoint \ud074\ub798\uc2a4\ub97c super class\ub85c \ud574\uc11c \uc2e4\uc81c \ud654\uba74\uc5d0 \uc88c\ud45c\ub97c \uadf8\ub824\uc8fc\ub294 \uae30\ub2a5\uae4c\uc9c0 \ud568\uaed8 \uac00\uc9c0\uace0 \uc788\ub294 ColorPointDrawer \ud074\ub798\uc2a4\ub97c subclass\ub85c \ub9cc\ub4e4\uc5b4 \ubd05\ub2c8\ub2e4. \uc5ec\uae30\uc138 \ud654\uba74\uc5d0 \uadf8\ub9b4\uc9c0 \ub9d0\uc9c0\ub97c \ud50c\ub798\uadf8 \uac12\uc73c\ub85c \uad00\ub9ac\ud558\ub294 ActivationFlag\ub97c <em>with<\/em> \ubb38\ubc95\uc73c\ub85c mixin \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>class ColorPointDrawer extends ColorPoint with ActivationFlag {\n<\/pre>\n\n\n\n<p>\uadf8\ub7ec\uba74 ActivationFlag\uc5d0 \ub300\ud574\uc11c \uc880 \ub354 \uc790\uc138\ud558\uac8c \uc54c\uc544\ubd05\ub2c8\ub2e4. Dart \uc5b8\uc5b4\ub294 \ubc84\uc804 2.1\ubd80\ud130 with \ubb38\ubc95\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc77c\uc885\uc758 mixins \uc804\uc6a9 \uac1d\uccb4 \ub4e4\uc744 \uc704\ud558\uc5ec <em>mixin<\/em> \ubb38\ubc95\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc778 class\ub97c \ud1b5\ud55c \ud074\ub798\uc2a4\uc640 \uc720\uc0ac\ud558\uc9c0\ub9cc, constructor\uac00 \uc5c6\ub294 \uac83\uc73c\ub85c \uc81c\ud55c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574\uc11c \ub9cc\ub4e0 ActivationFlag\uc758 \uc18c\uc2a4 \ucf54\ub4dc\uac00 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <\/p>\n\n\n\n<pre>mixin ActivationFlag {\n  \/\/ Instance variable\n  bool flag = true;\n\n  \/\/ Getter and Setter for instant variable\n  bool get flagActivated =&gt; this.flag;\n  set flagActivated(bool givenFlag) =&gt; (this.flag = givenFlag);\n}\n<\/pre>\n\n\n\n<p>class \ubb38\ubc95\uc774 \uc788\uc5b4\uc57c \ud560 \uacf3\uc5d0 mixin\uc774\ub77c\uace0 \uc368\uc788\uc744 \ubfd0, \ubcf4\uae30\uc5d0\ub294 class\ub97c \ub9cc\ub4dc\ub294 \uac83\uacfc \ub2e4\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc2e4\uc81c\ub85c class\ub85c \uc120\uc5b8\uc744 \ud574\ub3c4 \ub3d9\uc791 \ud558\uba70, 2.0 \uc774\uc804\uc5d0\ub294 class \ubb38\ubc95\uc73c\ub85c \ub9cc\ub4e0 mixins \ub4e4\uc744 <em>with<\/em> \ubb38\ubc95\uc73c\ub85c \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4. ActivationFlag mixin\uc548\uc5d0\ub294 instance variable\ub85c bool \uac12\uc758 flag\uac00 \uc788\uc73c\uba70, default\ub85c true \uac12\uc744 \uac16\ub3c4\ub85d \ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc774 \uac12\uc744 \ubcc0\uacbd\ud558\uac70\ub098 \ud639\uc740 \uc77d\uc5b4\ub0b4\ub294 Getter\uc640 Setter\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub9cc\uc57d (\uc774\uc81c \uc124\uba85\ud560) ActivationFlag\uc774 ColorPointDrawer\uc5d0\ub9cc \ub3c5\uc810\uc801\uc73c\ub85c \uc0ac\uc6a9\ub41c\ub2e4\uba74, \uc55e\uc11c\uc758 class ColorPointDrawer extends ColorPoint with ActivationFlag { } \uad6c\ubb38 \ub300\uc2e0 ActivationFlag\uc758 \uc815\uc758 \ubd80\ubd84\uc5d0 on \uba85\ub839\uc744 \uc0ac\uc6a9\ud574\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \ud560\uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>mixin ActivationFlag on ColorPointDrawer {\n  \/\/ Instance variable\n  bool flag = true;\n\n  \/\/ Getter and Setter for instant variable\n  bool get flagActivated =&gt; this.flag;\n  set flagActivated(bool givenFlag) =&gt; (this.flag = givenFlag);\n}\n<\/pre>\n\n\n\n<p>\uc774\uc81c ColorPoint \ud074\ub798\uc2a4\uc758 \uae30\ub2a5\uacfc ActivationFlag \ubbf9\uc2a4\uc778\uc744 \ud3ec\ud568\ud558\ub294 ColorPointDrawer \ud074\ub798\uc2a4 \ub0b4\uc6a9\uc744 \ucc44\uc6cc \ubcf4\ub3c4\ub85d \ud569\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 \uac04\ub2e8\ud55c \ud615\ud0dc\ub85c \uc2dc\uc791\ud574 \ubd05\ub2c8\ub2e4. <\/p>\n\n\n\n<pre>class ColorPointDrawer extends ColorPoint with ActivationFlag {\n  \/\/ Constructore with super() invokation\n  ColorPointDrawer(var r, var g, var b, var x, var y) : super(r,g,b,x,y) { }\n\n  \/\/ Overriding super class stringfy property\n  @override\n  String get stringify =&gt; (this.flagActivated == true) ? \"${super.stringify} is activated\" : \"null\";\n}\n<\/pre>\n\n\n\n<p>Constructor\ub294 ColorPoint \ud074\ub798\uc2a4\uc758 constructor\ub97c super()\ub85c \ud638\ucd9c\ud558\uc5ec, \uadf8\ub300\ub85c \uc7ac\uc0ac\uc6a9 \ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 Point \ud074\ub798\uc2a4\uc5d0\uc11c \ucc98\uc74c \ub9cc\ub4e4\uc5b4 \uc838\uc11c ColorPoint\uc5d0\uc11c override\ud55c stringify Getter\ub97c \ub2e4\uc2dc \ud55c\ubc88 override\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 anonymous function \uc548\uc744 \ubcf4\uba74, \uc6b0\ub9ac\uac00 mixin\ud55c ActivationFlag\uc758 flag \uac12\uc774 true\uc774\uba74 ColorPoint\uc758 stringify \uc815\ubcf4\uc5d0 flag \uc815\ubcf4\ub97c \ucd94\uac00\ud558\uc5ec \ucd9c\ub825\uc744 \ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc flase\uc774\uba74 null \uac12\uc744 \ub9ac\ud134 \ud568\uc73c\ub85c \ud654\uba74\uc5d0 \ucd9c\ub825\uc744 \ud558\uc9c0 \uc54a\ub3c4\ub85d \uc720\ub3c4\ud558\uac8c \ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c, super class\uc778 ColorPoint\uc758 \ub0b4\uc6a9\uacfc mixin\ub41c ActivationFlag\ub97c \ud569\uccd0\uc11c, stringify\ub97c override\ud55c \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0\uc758 \ub0b4\uc6a9\uc744 \ubaa8\ub450 \ubaa8\uc544\uc11c darttutorial-21-01.dart\ub85c \ud3ec\ud568\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>\/\/ darttutorial-21-01.dart \n\n\/\/ Library for Point and ColorPoint classes\nimport 'darttutorial-21-00.dart';\n\nmixin ActivationFlag {\n  \/\/ Instance variable\n  bool flag = true;\n\n  \/\/ Getter and Setter for instant variable\n  bool get flagActivated =&gt; this.flag;\n  set flagActivated(bool givenFlag) =&gt; (this.flag = givenFlag);\n}\n\nclass ColorPointDrawer extends ColorPoint with ActivationFlag {\n  \/\/ Constructore with super() invokation\n  ColorPointDrawer(var r, var g, var b, var x, var y) : super(r,g,b,x,y) { }\n\n  \/\/ Overriding super class stringfy property\n  @override\n  String get stringify =&gt; (this.flagActivated == true) ? \"${super.stringify} is activated\" : \"null\";\n}\n\nvoid main() {\n  var pPoint1 = Point();\n  var cPoint1 = ColorPoint();\n  \/\/ output: [01]$ pPoint1:(0,0), cPoint1:(0,0) with (0,0,0)\n  print(\"[01]\\$ pPoint1:${pPoint1.stringify}, cPoint1:${cPoint1.stringify}\");\n\n  var dPoint1 = ColorPointDrawer(100, 100, 100, 7, 7);\n  \/\/ output: [02]$ dPoint1:(7,7) with (100,100,100) is activated\n  print(\"[02]\\$ dPoint1:${dPoint1.stringify}\");\n  \n  dPoint1.flagActivated = false;\n  \/\/ output: [03]$ dPoint1:null\n  print(\"[03]\\$ dPoint1:${dPoint1.stringify}\");\n}\n<\/pre>\n\n\n\n<p>\uadf8\ub9ac\uace0 darttutorial-21-01.dart \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589 \uacb0\uacfc\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \ud3ec\ud568\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>[01]$ pPoint1:(0,0), cPoint1:(0,0) with (0,0,0)\n[02]$ dPoint1:(7,7) with (100,100,100) is activated\n[03]$ dPoint1:null\n<\/pre>\n\n\n\n<h4>Implicit Interfaces (<em>implements<\/em> Syntax)<\/h4>\n\n\n\n<p>Interfaces\ub294 \ud074\ub798\uc2a4\uc758 \uba64\ubc84 \ubcc0\uc218\uc640 \uba54\uc18c\ub4dc\uc758 \uc774\ub984\uacfc \uc785\ucd9c\ub825 \ud30c\ub77c\uba54\ud0c0\uc758 \uc815\uc758\ub97c \uc758\ubbf8\ud55c\ub2e4\uace0 \ubcf4\uba74 \ub429\ub2c8\ub2e4. Implicit \ud558\ub2e4\ub294 \uc758\ubbf8\ub294, Dart \uc5b8\uc5b4\uc5d0\uc11c \ud074\ub798\uc2a4\uac00 \ub9cc\ub4e4\uc5b4\uc9c0\uba74, \uc774\ub4e4\uc744 \ub0b4\ubd80\uc801\uc73c\ub85c \uad00\ub9ac\ud55c\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \ub530\ub77c\uc11c \ub0b4\ubd80\uc801\uc73c\ub85c \uc5b4\ub5a4 \uac12\uc774\ub098 \uae30\ub2a5\uc744 \ud558\ub294\uc9c0\uc640\ub294 \uc0c1\uad00\uc5c6\uc774 \ubcc0\uc218\uc640 \ud568\uc218\uc758 \uc774\ub984\uacfc \uc785\ucd9c\ub825 \ud30c\ub77c\uba54\ud0c0\uc758 \uc774\ub984\/\ud0c0\uc785\uc774 \uc911\uc694\ud55c \uc815\ubcf4\uc785\ub2c8\ub2e4. <em>implements<\/em> \ubb38\ubc95\uc740 class Student implements Person { &#8230; } \ucc98\ub7fc \uc0ac\uc6a9\ud558\ub294\ub370, Person\uc774 \uac00\uc9c0\uace0 \uc788\ub294 interfaces \ub4e4\uc744 Student\ub3c4 \uadf8\ub798\ub3c4 \uad6c\ud604\ud574\uc57c \ud55c\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, \ud574\ub2f9 \ubcc0\uc218\ub4e4\uacfc \ud568\uc218\uc758 \ub0b4\uc6a9\ub4e4\uc774 \uc804\ub2ec\ub418\uc9c0\ub294 \uc54a\uc73c\uba70, Person\uc5d0\uc11c \uc815\uc758\ud55c \ubcc0\uc218\uc640 \uba54\uc18c\ub4dc\uac00 Student\uc5d0\uc11c\ub3c4 \uad6c\ud604\uc774 \ub418\uc5b4\uc57c \ud55c\ub2e4\uace0 \uaddc\uc815\ud558\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \ub530\ub77c\uc11c \uac1c\ubc1c\uc790\ub294 Studnet \ud074\ub798\uc2a4\ub97c \ub9cc\ub4dc\ub294 \uacbd\uc6b0, Person\uc5d0\uc11c \uc815\uc758\ud55c \uba64\ubc84 \ubcc0\uc218\uc640 \uba54\uc18c\ub4dc\ub4e4\uc758 \uc774\ub984\uacfc \ud0c0\uc785\uc744 \uc720\uc9c0\ud558\uba74\uc11c (\ub0b4\uc6a9\uc740 \ub2e4\ub974\ub354\ub77c\ub3c4) \uad6c\ud604\uc744 \ud574\uc918\uc57c \ud569\ub2c8\ub2e4. \uc544\ub798\uc758 darttutorial-21-02.dart \ud504\ub85c\uadf8\ub7a8\uc740 Person\uc5d0\uc11c \uac00\uc9c0\uace0 \uc788\ub294 _name \ubcc0\uc218\uc640 id \uba54\uc18c\ub4dc\ub97c, Student\uc640 Professor \ud074\ub798\uc2a4\uc5d0\uc11c\ub3c4 \uad6c\ud604\ud574 \uc918\uc57c \ud558\ub294 \uac83\uc744 \ubcfc\uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c getID\uc640 \uac19\uc740 \ud558\ub098\uc758 \ud568\uc218\ub97c \ud1b5\ud574\uc11c \uc11c\ub85c \ub2e4\ub978 \ud074\ub798\uc2a4\uc758 \uba54\uc18c\ub4dc\uc5d0 \uc811\uadfc\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud558\uae30\uc5d0, \ub2e4\uc591\ud55c \ud074\ub798\uc2a4 \uac1d\uccb4\ub4e4\uc774 \ub354 \ub9cc\ub4e4\uc5b4 \uc9c0\ub354\ub77c\ub3c4 \uc774\ub97c \uc0ac\uc6a9\ud558\ub294 \ucabd\uc758 \ucf54\ub4dc\ub294 \ubc14\ub00c\uc9c0 \uc54a\uc544\ub3c4 \ub418\ub294 \uac83\uc744 \uc54c\uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>\/\/ darttutorial-21-02.dart \n\n\/\/ A person. The implicit interface contains id().\nclass Person {\n  \/\/ In the interface.\n  var _name;\n  String id() =&gt; '${_name}';\n\n  \/\/ Not in the interface, since this is a constructor.\n  Person(this._name);\n}\n\n\/\/ An Student implementation of the Person interface.\nclass Student implements Person {\n  \/\/ Implementation of interface.\n  var _name;\n  String id() =&gt; '${_name}:${_studentNumber}';\n\n  \/\/ Not in the interface.\n  var _studentNumber;\n  Student(this._name, this._studentNumber);\n}\n\n\/\/ An Professor implementation of the Person interface.\nclass Professor implements Person {\n  \/\/ Implementation of interface.\n  var _name;\n  String id() =&gt; '${_name}:${_professorNumber}';\n\n  \/\/ Not in the interface.\n  var _professorNumber;\n  Professor(this._name, this._professorNumber);\n}\n\n\/\/ Seamless interface for Person, Student and Professor.\nString getID(Person person) =&gt; person.id();\n\nvoid main() {\n  \/\/ Seamless access to Person, Student and Professor.\n  print(getID(Person(\"Person\")));\n  print(getID(Student(\"Student\", \"#01\")));\n  print(getID(Professor(\"Professor\", \"#0A\")));\n}\n<\/pre>\n\n\n\n<p>\uc774 \ud504\ub85c\uadf8\ub7a8\uc758 \ucd9c\ub825 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>Person\nStudent:#01\nProfessor:#0A\n<\/pre>\n\n\n\n<p>\ucc38\uace0\ub85c  <em>implements<\/em> \ubb38\ubc95\uc758 \uacbd\uc6b0\ub294 \uc81c\ub300\ub85c \uc815\ud574\uc9c4 interfaces\ub97c \uad6c\ud604\ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0, \ud504\ub85c\uadf8\ub7a8\uc758 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud558\uc5ec \ub3d9\uc791\uc774 \ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h4>Abstract Methods and Classes<\/h4>\n\n\n\n<p>darttutorial-21-02.dart \ud504\ub85c\uadf8\ub7a8\uc744 \uc790\uc138\ud788 \ubcf4\uace0 \uc788\uc73c\uba74, \uc2e4\uc81c \ud504\ub85c\uadf8\ub7a8\uc774 \uc218\ud589\ub418\ub294 \ud658\uacbd\uc5d0\uc11c Student\uc640 Professor \ud074\ub798\uc2a4\ub294 \uac1d\uccb4\ub97c \ub9cc\ub4e4\uc5b4\uc11c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \ub9de\uc9c0\ub9cc, Person\uc774\ub77c\ub294 \ud074\ub798\uc2a4\ub294 \uac1d\uccb4\ub97c \ub9cc\ub4e4\uc77c\uc774 \uc788\uc744\uae4c \uc758\uc544\ud574 \uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc989, \ud559\uad50\uc5d0\ub294 \ud559\uc0dd\uacfc \uad50\uc218\uac00 \ud544\uc694\ud558\uc9c0\ub9cc, &#8216;\uc0ac\ub78c&#8217;\uc774\ub77c\ub294 \uc77c\ubc18\uc801\uc778 \uac1d\uccb4\ub294 \uad6c\uccb4\uc131\uc774 \ub5a8\uc5b4\uc9c0\uae30 \ub54c\ubb38\uc5d0, \uac1d\uccb4\ub97c \ub9cc\ub4e4 \ud655\ub960\uc774 \ub0ae\uc544\uc9d1\ub2c8\ub2e4. \ub2e4\ub9cc, Person\uc774\ub77c\ub294 \uac1d\uccb4\uac00 \uc81c\uacf5\ud588\ub358 String id() \ud568\uc218\ub294, \uac19\uc740 \uc774\ub984\uc758 \ud568\uc218\uac00 Student\uc640 Professor\uc5d0\ub3c4 \uc77c\uad00\ub418\uac8c \uc81c\uacf5\ub418\uc5b4 \uc0ac\uc6a9\uc131 \uba74\uc5d0\uc11c \uc218\uc6d4\uc131\uc774 \uc99d\uac00\ud558\ubbc0\ub85c, \uc874\uc7ac\ud560 \ud544\uc694\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c, Person \ud074\ub798\uc2a4\uc758 \uc874\uc7ac\uc774\uc720\ub294 String id() \ud568\uc218\ub77c\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub294 \uc758\ubbf8\uac00 \uc788\uc9c0\ub9cc, \uc2e4\uccb4 \uac1d\uccb4\uac00 \ub9cc\ub4e4\uc5b4\uc9c0\uc9c0 \uc54a\ub294\ub2e4\uba74, \uba64\ubc84 \ubcc0\uc218\uc778 var _name\ub3c4 \uc758\ubbf8\uac00 \uc5c6\uc73c\uba70, \uc774 \ubcc0\uc218\uac00 \uc5c6\uc73c\ub2c8 String id() \ud568\uc218\uc758 \uad6c\uccb4\uc801\uc778 \uae30\ub2a5\uc774 \uc815\ud574\uc9c8 \ud544\uc694\ub3c4 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \uc778\ud130\ud398\uc774\uc2a4\ub9cc \uc874\uc7ac\ud558\uc5ec \uc2e4\uc81c \ub370\uc774\ud0c0\uc640 \uae30\ub2a5\uc740 \uc5c6\uae30\uc5d0 \uac1d\uccb4\ub85c \ub9cc\ub4e4\uc218 \uc5c6\ub294 \ud074\ub798\uc2a4, \uadf8\ub807\uc9c0\ub9cc \uc774\ub97c \ud1b5\ud574\uc11c implements\ub97c \ud1b5\ud55c \uad00\ub828 \ud074\ub798\uc2a4 \uac1d\uccb4\uc758 \uc0dd\uc131\uc774\ub098 subclass\uc758 \uad6c\ud604\uc5d0\ub294 \uc720\uc6a9\ud55c \ud074\ub798\uc2a4\ub294 abstract \ud074\ub798\uc2a4 \ub77c\uace0 \ud569\ub2c8\ub2e4. darttutorial-21-02.dart \ud504\ub85c\uadf8\ub7a8\uc758 Person \ud074\ub798\uc2a4\ub97c abstract\ub85c \ubcc0\uacbd\ud55c darttutorial-21-03.dart \ud504\ub85c\uadf8\ub7a8\uc744 \uc544\ub798\uc5d0\uc11c \ud655\uc778 \ubc14\ub78d\ub2c8\ub2e4. <\/p>\n\n\n\n<pre>\/\/ darttutorial-21-03.dart \n\n\/\/ A person. The implicit interface contains id().\nabstract class Person {\n  \/\/ In the interface.\n  String id();\n}\n\n\/\/ An Student implementation of the Person interface.\nclass Student implements Person {\n  \/\/ Implementation of interface.\n  var _name;\n  String id() =&gt; '${_name}:${_studentNumber}';\n\n  \/\/ Not in the interface.\n  var _studentNumber;\n  Student(this._name, this._studentNumber);\n}\n\n\/\/ An Professor implementation of the Person interface.\nclass Professor implements Person {\n  \/\/ Implementation of interface.\n  var _name;\n  String id() =&gt; '${_name}:${_professorNumber}';\n\n  \/\/ Not in the interface.\n  var _professorNumber;\n  Professor(this._name, this._professorNumber);\n}\n\n\/\/ Seamless interface for Person, Student and Professor.\nString getID(Person person) =&gt; person.id();\n\nvoid main() {\n  \/\/ Seamless access to Person, Student and Professor.\n  \/\/ print Student:#01\n  print(getID(Student(\"Student\", \"#01\")));\n  \/\/ print Professor:#0A\n  print(getID(Professor(\"Professor\", \"#0A\")));\n}\n<\/pre>\n\n\n\n<p>Person \ud074\ub798\uc2a4\ub97c \ubcf4\uba74, \uc0ac\uc2e4\uc0c1 String id()\uc778 \uc778\ud130\ud398\uc774\uc2a4\ub9cc \uc788\uc73c\uba70, \uba64\ubc84 \ubcc0\uc218\ub3c4 \uc9c0\uc6e0\uace0, String id() \ud568\uc218\uc758 \uad6c\uccb4\uc801\uc778 \ub3d9\uc791\ub3c4 \uae30\uc220\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ud568\uc218\uc758 \uc774\ub984\uacfc \uc785\ucd9c\ub825 \ud30c\ub77c\uba54\ud0c0\ub9cc \uc815\uc758\ud55c \ud568\uc218\ub294 abstract \ud568\uc218\/\uba54\uc18c\ub4dc\ub77c\uace0 \ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c Person\uc740 \ubcc4\ub3c4\uc758 \uac1d\uccb4\ub97c \ub9cc\ub4e4\uc218 \uc5c6\uae30\uc5d0, main()\uc5d0\uc11c Person \uac1d\uccb4\ub97c \ub9cc\ub4e4\ub358 \ucf54\ub4dc\ub294 \uc9c0\uc6e0\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc, Person\uc744 implement\ud55c Student\uc640 Professor\ub294 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uace0 \uc788\uc73c\uba70, getID()\ub97c \ud1b5\ud574\uc11c Person\uc744 implement\ud55c \uac1d\uccb4\ub4e4\uc5d0 \uc77c\uad00\ub41c \ubc29\ubc95\uc73c\ub85c \uc811\uadfc\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>Abstract \ud074\ub798\uc2a4\ub97c \uaf2d implement \ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4. darttutorial-21-04.dart \ud504\ub85c\uadf8\ub7a8\uc744 \ubcf4\uba74, abstract \ud074\ub798\uc2a4\ub97c extends \ud558\ub294 \ubc29\uc2dd\uc73c\ub85c\ub3c4 \uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\uba74, \uc6b0\ub9ac\uac00 \ub9cc\ub4e0 Point \ud074\ub798\uc2a4\uac00 abstract \ud074\ub798\uc2a4\ub85c \ub418\uace0, \uc774\ub85c\ubd80\ud130 ColorPoint\uacfc BlackWhitePoint\ub97c Point \ud074\ub798\uc2a4\uc758 subclass\ub85c \ub9cc\ub4dc\ub294 \uac83\ub3c4 \uac00\ub2a5\ud569\ub2c8\ub2e4. \uc2e4\uc81c \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c\ub294 Point \ud074\ub798\uc2a4\ub294 \uc758\ubbf8\uac00 \uc5c6\uc73c\ubbc0\ub85c \uac1d\uccb4\ub97c \ub9cc\ub4e4\uc9c0 \uc54a\uace0, \ud544\uc694\uc2dc \uceec\ub7ec\uc758 \uc810 \ud639\uc740 \ud751\ubc31\uc758 \uc810\uc744 \ub9cc\ub4dc\ub294 \ubc29\uc2dd\uc73c\ub85c \ubcf4\uba74 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>\/\/ darttutorial-21-04.dart \n\n\/\/ A person. The implicit interface contains id().\nabstract class Person {\n  \/\/ In the interface.\n  String id();\n}\n\n\/\/ An Student implementation of the Person interface.\nclass Student extends Person {\n  \/\/ Implementation of interface.\n  var _name;\n  String id() =&gt; '${_name}:${_studentNumber}';\n\n  \/\/ Not in the interface.\n  var _studentNumber;\n  Student(this._name, this._studentNumber);\n}\n\n\/\/ An Professor implementation of the Person interface.\nclass Professor extends Person {\n  \/\/ Implementation of interface.\n  var _name;\n  String id() =&gt; '${_name}:${_professorNumber}';\n\n  \/\/ Not in the interface.\n  var _professorNumber;\n  Professor(this._name, this._professorNumber);\n}\n\n\/\/ Seamless interface for Person, Student and Professor.\nString getID(Person person) =&gt; person.id();\n\nvoid main() {\n  \/\/ Seamless access to Person, Student and Professor.\n  print(getID(Student(\"Student\", \"#01\")));\n  print(getID(Professor(\"Professor\", \"#0A\")));\n}\n<\/pre>\n\n\n\n<h4>Extension Methods<\/h4>\n\n\n\n<p>Extension methods\ub294 Dart 2.7\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uae30\ub2a5\uc73c\ub85c \ucd5c\uc2e0 \uae30\ubc95 \uc911\uc758 \ud558\ub098\ub85c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc6b0\ub9ac\uac00 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\uc720\ub97c \uc7ac\uc0ac\uc6a9\/\uc7ac\ud65c\uc6a9\uc774\ub77c\uace0 \ud558\uc600\ub294\ub370, \uc774\ubbf8 \ub9cc\ub4e4\uc5b4\uc838\uc11c \uc798 \uc4f0\uace0 \uc788\ub294 Dart \uc5b8\uc5b4 \uc790\uccb4\uc758 \ud639\uc740 \uae30 \uac1c\ubc1c\ud55c \ud074\ub798\uc2a4(\ud639\uc740 \uc774\ud6c4 \uc124\uba85\ud560 \ub77c\uc774\ube0c\ub7ec\ub9ac)\ub97c \uc218\uc815\ud558\uc9c0 \uc54a\uace0, \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ucd94\uac00\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uba87\ubc88 \ub4f1\uc7a5\ud588\ub358 \ub2e4\uc74c\uc758 \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubd05\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>print(int.parse('42')); \/\/ Built-in Dart function\nprint(double.parse('42.0')); \/\/ Built-in Dart function\n<\/pre>\n\n\n\n<p>\uc608\uc81c \ud504\ub85c\uadf8\ub7a8\uc73c\ub85c \uba87\ubc88 \ub4f1\uc7a5\ud588\ub358 \ucf54\ub4dc\ub85c\uc368, int.parse(&#8217;42&#8217;)\ub294 \ubb38\uc790\uc5f4 &#8217;42&#8217;\ub97c \uc815\uc218 42\ub85c \ubc14\uafd4\uc8fc\ub294 \uae30\ub2a5\uc744 \ud558\ub294 int \ud074\ub798\uc2a4\uc758 \uba64\ubc84 \uba54\uc18c\ub4dc \uc785\ub2c8\ub2e4. \ub9c8\ucc2c\uac00\uc9c0\ub85c double.parse(&#8216;42.0&#8217;)\uc740 &#8216;42.0&#8217; \ubb38\uc790\uc5f4\uc744 42.0\uc758 \uc2e4\uc218\ub85c \ubc14\uafd4\uc8fc\ub294 double \ud074\ub798\uc2a4\uc758 \uba64\ubc84 \uba54\uc18c\ub4dc \uc785\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 \ubb38\uc790\uc5f4 \ud074\ub798\uc2a4\uc778 String\uc5d0\uc11c\ub3c4 \uc720\uc0ac\ud55c \uae30\ub2a5\uc744 \ud558\uace0 \uc2f6\ub2e4\uba74 \uc5b4\ub5bb\uac8c \ud574\uc57c\ud560\uae4c\uc694? String \ud074\ub798\uc2a4\uc5d0\ub294 \uc544\uc27d\uac8c\ub3c4 \uc774\ub7f0 \uae30\ub2a5\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>Extension Methods\ub294 \ub9d0 \uadf8\ub300\ub85c \uae30\uc874\uc758 \ud074\ub798\uc2a4\uc5d0 Method\ub97c Extension \ud574\uc8fc\ub294 \uae30\ub2a5\uc785\ub2c8\ub2e4. \uc6b0\ub9ac\uc758 \ubaa9\ud45c\ub97c \uae30\uc874\uc758 String \ud074\ub798\uc2a4\uac00 \uc9c1\uc811 \uc2a4\uc2a4\ub85c\uc758 \uc800\uc7a5\ud55c \ubb38\uc790\uc5f4\uc744 \uc815\uc218\/\uc2e4\uc218\ub85c \ubc14\uafd4\uc8fc\ub294 Method\ub97c Extension \ud55c\ub2e4\uace0 \ud569\uc2dc\ub2e4. \uadf8\ub9ac\uace0 \uc774 \uaddc\uce59\uc758 \uc774\ub984\uc744 NumberParsing_v1 \uc774\ub77c\uace0 \ubd80\ub974\uaca0\uc2b5\ub2c8\ub2e4. \uc544\ub798\ub294 \uc774 \uae30\ub2a5\uc744 \uc218\ud589\ud558\ub294 int parseInt()\uc640 double parseDouble() \uae4c\uc9c0 \ubaa8\ub450 \uad6c\ud604\ud55c \uc644\uc804\uccb4 \uc785\ub2c8\ub2e4. <\/p>\n\n\n\n<pre>extension NumberParsing_v1 on String {\n  int parseInt() {\n    return int.parse(this);\n  }\n\n  double parseDouble() {\n    return double.parse(this);\n  }\n}\n<\/pre>\n\n\n\n<p>String \ud074\ub798\uc2a4\uc5d0 \ub300\ud574\uc11c(on) NumberParsing_v1\ub77c\ub294 \uaddc\uce59\uba85\uc73c\ub85c int parseInt()\uacfc double parseDouble() \uba54\uc18c\ub4dc\ub97c extension \ud55c\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. parseInt()\ub97c \ubcf4\uba74, \uc785\ub825 \ud30c\ub77c\uba54\ud0c0\ub294 \uc5c6\uc73c\ub098 \ub0b4\ubd80\ub97c \ubcf4\uba74 this\ub97c \ud1b5\ud574\uc11c \uc790\uccb4\uc801\uc73c\ub85c \uac00\uc9c4 \ubb38\uc790\uc5f4\uc744 int.parse()\uc5d0 \ub123\uc5b4\uc11c \uc815\uc218\ub85c \ucde8\ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc774\ub807\uac8c \ubc14\ub010 \uc815\uc218 \uac12\uc744 return \ud569\ub2c8\ub2e4. parseDouble()\ub3c4 \uc720\uc0ac\ud558\uac8c this\uc5d0 \uc800\uc7a5\ud55c \ubb38\uc790\uc5f4\uc744 double \uac12\uc73c\ub85c return \ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c extension\ud55c method\ub97c \uc2e4\ud589\ud558\ub294 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>print('42'.parseInt()); \/\/ Use an extension method. \nprint('42.0'.parseDouble()); \/\/ Use an extension method.\n<\/pre>\n\n\n\n<p>\uc2e4\ud589\ud558\ub294 \ubd80\ubd84\uc744 \ubcf4\uba74, \ubb38\uc790\uc5f4 &#8217;42&#8217;\uc5d0 &#8220;.&#8221; \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c, \ub9c8\uce58 String\uc758 \uba64\ubc84 \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c\ud558\ub294 \uac83\ucc98\ub7fc \ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc6b0\ub9ac\uac00 \ub9cc\ub4e0 Methods \ub4e4\uc774 \uc2e4\uc81c String \ud074\ub798\uc2a4\ub97c Extension \ud55c \uac83\uc73c\ub85c \ud30c\uc545 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c this\ub97c \ud1b5\ud574\uc11c &#8217;42&#8217;\ub97c \ucde8\ud55c\ud6c4, int.parse\ub85c \uc815\uc218 \ubcc0\ud658\ud55c \uac12\uc744 \ub9ac\ud134\ud558\uac8c \ub429\ub2c8\ub2e4. parseDouble()\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ub3d9\uc791\ud569\ub2c8\ub2e4. \uc9c0\uae08\uae4c\uc9c0 \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \uc544\ub798 darttutorial-21-05.dart \ud504\ub85c\uadf8\ub7a8\uc5d0 \ud558\ub098\ub85c \ubaa8\uc544 \ub450\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>\/\/ darttutorial-21-05.dart \n\nextension NumberParsing_v1 on String {\n  int parseInt() {\n    return int.parse(this);\n  }\n\n  double parseDouble() {\n    return double.parse(this);\n  }\n}\n\nvoid main() {\n  print(int.parse('42')); \/\/ Built-in Dart function\n  print(double.parse('42.0')); \/\/ Built-in Dart function\n\n  print('42'.parseInt()); \/\/ Use an extension method. \n  print('42.0'.parseDouble()); \/\/ Use an extension method.\n}\n<\/pre>\n\n\n\n<p>\uc774\ub807\uac8c \ud568\uc73c\ub85c\uc368, \uc774\ubbf8 \uc798 \ub9cc\ub4e4\uc5b4\uc9c4 \ud074\ub798\uc2a4(\ub77c\uc774\ube0c\ub7ec\ub9ac)\ub97c \uc218\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4, \uc27d\uac8c \ucd94\uac00\uc801\uc778 \uae30\ub2a5\uc744 \ub9cc\ub4e4\uc5b4\uc11c \uac1c\ub7c9\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h4>Class Variables and Methods (<em>Static<\/em> Syntax)<\/h4>\n\n\n\n<p>Static \ubb38\ubc95\uc740 \ud074\ub798\uc2a4\uc758 \uba64\ubc84 \ubcc0\uc218 \ud639\uc740 \uba64\ubc84 \uba54\uc18c\ub4dc\ub97c \ub9cc\ub4dc\ub294 \ub9e8 \uc55e\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Statics\uc73c\ub85c \uc815\uc758\ub41c \ubcc0\uc218\ub294 \uac1d\uccb4\uc5d0 \uc800\uc7a5\ub418\ub294 \uac83\uc774 \uc544\ub2c8\uace0, \ud074\ub798\uc2a4\uc5d0 \uadc0\uc18d \ub429\ub2c8\ub2e4. \ub530\ub77c\uc11c, \ud074\ub798\uc2a4\uc5d0\uc11c \uac1d\uccb4\ub97c \ub9cc\ub4e4\uc9c0 \uc54a\uc544\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4. Static \uba54\uc18c\ub4dc\ub3c4 \ud074\ub798\uc2a4\uc5d0 \uadc0\uc18d\ub41c \uc815\ubcf4\ub4e4 \ub9cc\uc73c\ub85c \uac1d\uccb4\ub4e4\uacfc \uc0c1\uad00\uc5c6\uc774 \ub3d9\uc791 \ud569\ub2c8\ub2e4. \ubc18\ub300\ub85c \uac1d\uccb4\uc5d0 \uadc0\uc18d\ub41c this\ub85c \uc811\uadfc\ud558\ub294 \uc815\ubcf4\ub4e4\uc740 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uac00\uc7a5 \uc77c\ubc18\uc801\uc778 \uc0ac\uc6a9 \uc0ac\ub840\ub294 \ud074\ub798\uc2a4\ub85c\ubd80\ud130 \ub9cc\ub4e4\uc5b4\uc9c0\ub294 \uac1d\uccb4\uc758 \uac2f\uc218\ub97c \uce74\uc6b4\ud305 \ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc55e\uc11c\uc5d0\uc11c \uac1c\ubc1c\ud55c Point \ud074\ub798\uc2a4\ub97c \uac04\ub2e8\ud558\uac8c \uc904\uc778\ud6c4 Static\uc744 \uc801\uc6a9\ud55c darttutorial-21-06.dart \ud504\ub85c\uadf8\ub7a8\uc744 \uc0b4\ud3b4\ubcf4\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>\/\/ darttutorial-21-06.dart \n\nclass Point {\n  \/\/ Instance Variables\n  var x;\n  var y;\n  static int hash = 0;\n\n  \/\/ Constructor with optional and default parameters\n  Point([var numX = 0, var numY = 0]) {\n    this.x = numX;\n    this.y = numY;\n    hash++;\n  }\n\n  \/\/ Getter\n  String get stringify =&gt; \"(${this.x},${this.y}) with hash:$hash\";\n\n  \/\/ Static Getter\n  static String get static_stringify =&gt; \"hash:$hash\";\n}\n\nvoid main() {\n  \/\/ Create 1st Point object\n  var p1 = Point();\n  print(p1.stringify);\n\n  \/\/ Create 2nd Point object\n  var p2 = Point();\n  print(p2.stringify);\n\n  \/\/ Create 3rd Point object\n  var p3 = Point();\n  print(p3.stringify);\n\n  \/\/ Print static memebr variable only\n  print(Point.static_stringify);\n}\n<\/pre>\n\n\n\n<p>\uba3c\uc800 \ud074\ub798\uc2a4\uc758 \uba64\ubc84 \ubcc0\uc218\ub85c static int hash = 0;\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc815\uc218\ud615\uc758 hash\ub77c\ub294 \uc774\ub984\uc758 \ubcc0\uc218\ub85c\uc11c, static\uc740 \uac1d\uccb4\uc640 \uc0c1\uad00\uc5c6\uc774 \ud074\ub798\uc2a4\uc5d0 \uadc0\uc18d\ub41c \ubcc0\uc218\ub85c\uc11c \ucee8\ud30c\uc77c \uc2dc\uc810\uc5d0 0\uc73c\ub85c \ucd08\uae30\ud654\uac00 \ub429\ub2c8\ub2e4. \uc774 \uac12\uc740 constructor\uc5d0\uc11c hash++;\ub85c \uac1d\uccb4\uac00 \ub9cc\ub4e4\uc5b4 \uc9c8\ub54c \ub9c8\ub2e4 \uc99d\uac00\ud569\ub2c8\ub2e4. \ud074\ub798\uc2a4\uc5d0 \uadc0\uc18d\ub418\uc5b4 \uc788\uae30\uc5d0 this \ubb38\ubc95\uc740 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774 \uac12\uc744 \ucd9c\ub825\ud558\ub294 Getter\ub3c4 static\uc73c\ub85c \uc815\uc758\ub418\uc5b4 \uc788\uc73c\uba70, static \ubcc0\uc218\ub97c \ub9ac\ud134\ud558\ub3c4\ub85d \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud504\ub85c\uadf8\ub7a8\uc758 \uc218\ud589 \uacb0\uacfc\uac00 \ub2e4\uc74c\ucc98\ub7fc \ud45c\uc2dc\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre>hash:0\n(0,0) with hash:1\n(0,0) with hash:2\n(0,0) with hash:3\nhash:3\n<\/pre>\n\n\n\n<p>main()\uc744 \ubcf4\uba74, \uac1d\uccb4\ub97c \ub9cc\ub4e4\uae30 \uc804\uc5d0 static_stringify Getter\ub97c \uc2e4\ud589\ud55c \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\uc9c1 \uac1d\uccb4\uac00 \ub9cc\ub4e4\uc5b4\uc9c0\uae30 \uc804\uc774\ubbc0\ub85c, hash\uc758 \uac12\uc740 0 \uc785\ub2c8\ub2e4. \uac1d\uccb4\uac00 \ub9cc\ub4e4\uc5b4 \uc9c8\ub54c \ub9c8\ub2e4 \uc774 \uac12\uc744 \ud655\uc778\ud558\uba74, 1\uc529 \uc99d\uac00\ud558\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c static \ubcc0\uc218\ub878 \ud568\uc218\ub97c \uc0ac\uc6a9\ud568\uc73c\ub85c\uc368, \ud074\ub798\uc2a4\uc5d0\uc11c \ub9cc\ub4e4\uc5b4\uc9c0\ub294 \uac1d\uccb4\ub97c \ub2e4\ub8e8\uac70\ub098, \ud639\uc740 \ud074\ub798\uc2a4\uc758 \uad00\ub9ac\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc744 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h4>\ub9c8\ubb34\ub9ac<\/h4>\n\n\n\n<p>\ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \ub450\ubc88\uc9f8 \uae00\ub85c\uc368, \ucf54\ub4dc\ub97c \uc7ac\uc0ac\uc6a9\ud558\uae30 \uc704\ud55c \ubc29\ubc95\uacfc \uc11c\ub85c \ub2e4\ub978 \ud074\ub798\uc2a4\uc758 \uac1d\uccb4\ub4e4\uc744 \uc77c\uad00\ub41c \ubc29\ubc95\uc73c\ub85c \uc811\uadfc \ud558\ub294 \ubc29\ubc95, \uc774\ubbf8 \uc644\uc131\ub3c4 \uc788\uac8c \uc798 \uc4f0\uace0 \uc788\ub294 \ud074\ub798\uc2a4(\ud639\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac)\ub97c \uc218\uc815\ud558\uc9c0 \uc54a\uace0\ub3c4 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ucd94\uac00\ud558\ub294 \ubc29\ubc95 \ub4f1\uc5d0 \ub300\ud574\uc11c \ubc30\uc6e0\uc2b5\ub2c8\ub2e4. \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \ubd80\ubd84\uc740 \ub0b4\uc6a9\uc774 \ub2e4\uc18c \ub113\uc740 \ud3b8\uc774\uae30\uc5d0, \ub2e4\ub984 \uae00\uc5d0\uc11c \ub0a8\uc740 Class \uc774\uc288\ub4e4\uc744 \ub9c8\uc9c0\ub9c9\uc73c\ub85c \ub2e4\ub8e8\ub3c4\ub85d \ud558\uaca0\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=\"132\" height=\"47\"\/><\/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; Making Class &#8211; Part.2 &gt; \uc55e\uc11c\uc758 \uae00\uc744 \ud1b5\ud574\uc11c \uae30\ubcf8\uc801\uc778 \ud074\ub798\uc2a4\uc758 \uac1c\ubc1c\uacfc subclass \uac1c\ubc1c\uc744 \ud559\uc2b5\ud558\uc600\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc740 \ud6c4\ubc18\ubd80\uc5d0 \ud574\ub2f9\ud558\ub294 \uae00\ub85c\uc368, \uc55e\uc11c \uac1c\ubc1c\ud55c Point\uc640 ColorPoint \ud074\ub798\uc2a4\ub97c \uadf8\ub300\ub85c \uc0ac\uc6a9\ud560 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":967,"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\/532"}],"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=532"}],"version-history":[{"count":9,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts\/532\/revisions"}],"predecessor-version":[{"id":968,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/posts\/532\/revisions\/968"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/media\/967"}],"wp:attachment":[{"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=532"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/mobilelab.khu.ac.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}