{"id":10431,"date":"2020-10-11T11:25:17","date_gmt":"2020-10-11T02:25:17","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=10431"},"modified":"2020-10-25T09:20:53","modified_gmt":"2020-10-25T00:20:53","slug":"composite-%ed%8c%a8%ed%84%b4","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=10431","title":{"rendered":"[GoF] Composite \ud328\ud134"},"content":{"rendered":"<h4>\ud328\ud134\uba85\uce6d<\/h4>\n<p>Composite<\/p>\n<h4>\ud544\uc694\ud55c \uc0c1\ud669<\/h4>\n<p>\ubc30\uc5f4\uc774\ub098 \ub9ac\uc2a4\ud2b8 \ub4f1\uacfc \uac19\uc740 \ucee8\ud14c\uc774\ub108\uc640 \ucee8\ud14c\uc774\ub108\ub97c \uad6c\uc131\ud558\ub294 \uad6c\uc131 \uc694\uc18c\ub97c \ub3d9\uc77c\ud558\uac8c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \ud328\ud134\uc774\ub2e4. \ucee8\ud14c\uc774\ub108\uc640 \uad6c\uc131 \uc694\uc18c\ub294 \ub3d9\uc77c\ud558\uac8c \ucc98\ub9ac\ub418\ubbc0\ub85c \ucee8\ud14c\uc774\ub108 \uc548\uc5d0\ub294 \ub610 \ub2e4\ub978 \ucee8\ud14c\uc774\ub108\ub97c \ud3ec\ud568\ud560 \uc218 \uc788\ub2e4.<\/p>\n<h4>\uc608\uc81c \ucf54\ub4dc <\/h4>\n<p><img decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/10\/composite.png\" alt=\"\" width=\"800\" class=\"aligncenter size-full wp-image-10432\" \/><\/p>\n<p>\uc6b0\ub9ac\uac00 \ud754\ud788 \uc811\ud558\ub294 \ud3f4\ub354\uc640 \ud30c\uc77c \uac1c\ub150\uc774\ub2e4. \ud3f4\ub354\uc640 \ud30c\uc77c\uc744 \ub3d9\uc77c\ud55c \uac1c\ub150\uc73c\ub85c \ub2e4\ub8e8\uae30 \uc704\ud574 Unit\uc774\ub77c\ub294 \ucd94\uc0c1 \ud074\ub798\uc2a4\ub97c \ub450\uace0, \ud3f4\ub354\uc640 \ud30c\uc77c\uc740 \uc774 Unit\uc744 \uc0c1\uc18d\ubc1b\uc544 \ucc98\ub9ac\ud55c\ub2e4. Folder \ud074\ub798\uc2a4\ub294 \ub2e4\uc2dc \uc5ec\ub7ec\uac1c\uc758 \ud3f4\ub354\uc640 \ud30c\uc77c\uc744 \ub2f4\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c Unit\uc744 \uc5ec\ub7ec\uac1c \ub2f4\uc744 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4. \uba3c\uc800 Unit \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\npublic abstract class Unit {\r\n\tprivate String name;\r\n\t\r\n\tpublic Unit(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n\t\r\n\tpublic String getName() {\r\n\t\treturn name;\r\n\t}\r\n\t\r\n\tpublic String toString() {\r\n\t\treturn name + \"(\" + getSize() + \")\";\r\n\t}\r\n\t\r\n\tpublic abstract int getSize();\r\n}\r\n<\/pre>\n<p>\uc774 Unit \ud074\ub798\uc2a4\ub97c \uc0c1\uc18d\ubc1b\ub294 File \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\npublic class File extends Unit {\r\n\tprivate int size;\r\n\t\r\n\tpublic File(String name, int size) {\r\n\t\tsuper(name);\r\n\t\tthis.size = size;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getSize() {\r\n\t\treturn size;\r\n\t}\r\n}\r\n<\/pre>\n<p>Folder \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.util.Iterator;\r\nimport java.util.LinkedList;\r\n\r\npublic class Folder extends Unit {\r\n\tprivate LinkedList&lt;Unit> units = new LinkedList&lt;Unit>();\r\n\r\n\tpublic Folder(String name) {\r\n\t\tsuper(name);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int getSize() {\r\n\t\tint size = 0;\r\n\t\tIterator&lt;Unit> it = units.iterator();\r\n\t\t\r\n\t\twhile(it.hasNext()) {\r\n\t\t\tUnit unit = it.next();\r\n\t\t\tsize += unit.getSize();\r\n\t\t}\r\n\t\t\r\n\t\treturn size;\r\n\t}\r\n\r\n\tpublic boolean add(Unit unit) {\r\n\t\tunits.add(unit);\r\n\t\treturn true;\r\n\t}\r\n\t\r\n\tprivate void list(String indent, Unit unit) {\r\n\t\tif(unit instanceof File) {\r\n\t\t\tSystem.out.println(indent + unit);\r\n\t\t} else {\r\n\t\t\tFolder dir = (Folder)unit;\r\n\t\t\tIterator&lt;Unit> it = dir.units.iterator();\r\n\t\t\tSystem.out.println(indent + \"+\" + unit);\r\n\t\t\twhile(it.hasNext()) {\r\n\t\t\t\tlist(indent + \"    \", it.next());\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\t}\r\n\t\r\n\tpublic void list() {\r\n\t\tlist(\"\", this);\r\n\t}\r\n}\r\n<\/pre>\n<p>\uc774 \ud074\ub798\uc2a4\ub4e4\uc744 \uc0ac\uc6a9\ud558\ub294 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\npublic class Main {\r\n\tpublic static void main(String[] args) {\r\n\t\tFolder root = new Folder(\"root\");\r\n\t\troot.add(new File(\"a.txt\", 1000));\r\n\t\troot.add(new File(\"b.txt\", 2000));\r\n\t\t\r\n\t\tFolder sub1 = new Folder(\"sub1\");\r\n\t\troot.add(sub1);\r\n\t\t\r\n\t\tsub1.add(new File(\"sa.txt\", 100));\r\n\t\tsub1.add(new File(\"sb.txt\", 4000));\r\n\t\t\r\n\t\tFolder sub2 = new Folder(\"sub2\");\r\n\t\troot.add(sub2);\r\n\t\t\r\n\t\tsub2.add(new File(\"SA.txt\", 250));\r\n\t\tsub2.add(new File(\"SB.txt\", 340));\r\n\t\t\r\n\t\troot.list();\r\n\t}\r\n}\r\n<\/pre>\n<p>\uc704 \ucf54\ub4dc\uc758 \uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class='code'>\r\n+root(7690)\r\n    a.txt(1000)\r\n    b.txt(2000)\r\n    +sub1(4100)\r\n        sa.txt(100)\r\n        sb.txt(4000)\r\n    +sub2(590)\r\n        SA.txt(250)\r\n        SB.txt(340)\r\n<\/pre>\n<p>Composite \ud328\ud134\uc740 \uc9d1\ud569\uacfc \uadf8 \uad6c\uc131\uc694\uc18c\ub97c \ub3d9\uc77c\ud558\uac8c \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \uc7ac\uadc0\uc801\uc778 \ucc98\ub9ac\uac00 \ud544\uc218\uc774\ub2e4.<\/p>\n<div style='background:#efefef;border-radius:8px;padding:12px 24px'>\uc774 \uae00\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc124\uacc4\uc758 \uae30\ubc18\uc774 \ub418\ub294 GoF\uc758 \ub514\uc790\uc778\ud328\ud134\uc5d0 \ub300\ud55c \uac15\uc758\uc790\ub8cc\uc785\ub2c8\ub2e4. \uc644\uc804\ud55c \uc2e4\uc2b5\uc744 \uc704\ud574 \uc774 \uae00\uc5d0\uc11c \uc18c\uac1c\ud558\ub294 \ud074\ub798\uc2a4 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uacfc \uc608\uc81c \ucf54\ub4dc\ub294 \uc644\uc804\ud558\uac8c \uc2e4\ud589\ub418\ub3c4\ub85d \uc81c\uacf5\ub418\uc9c0\ub9cc, \uc0c1\ub300\uc801\uc73c\ub85c \uc608\uc81c \ucf54\ub4dc\uc640 \uad00\ub828\ub41c \uc124\uba85\uc774 \ud568\ucd95\uc801\uc73c\ub85c \uc81c\uacf5\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0 \ub300\ud574 \uad81\uae08\ud55c \uc810\uc774 \uc788\uc73c\uba74 \ub313\uae00\uc744 \ud1b5\ud574 \ub0a8\uaca8\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ud328\ud134\uba85\uce6d Composite \ud544\uc694\ud55c \uc0c1\ud669 \ubc30\uc5f4\uc774\ub098 \ub9ac\uc2a4\ud2b8 \ub4f1\uacfc \uac19\uc740 \ucee8\ud14c\uc774\ub108\uc640 \ucee8\ud14c\uc774\ub108\ub97c \uad6c\uc131\ud558\ub294 \uad6c\uc131 \uc694\uc18c\ub97c \ub3d9\uc77c\ud558\uac8c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \ud328\ud134\uc774\ub2e4. \ucee8\ud14c\uc774\ub108\uc640 \uad6c\uc131 \uc694\uc18c\ub294 \ub3d9\uc77c\ud558\uac8c \ucc98\ub9ac\ub418\ubbc0\ub85c \ucee8\ud14c\uc774\ub108 \uc548\uc5d0\ub294 \ub610 \ub2e4\ub978 \ucee8\ud14c\uc774\ub108\ub97c \ud3ec\ud568\ud560 \uc218 \uc788\ub2e4. \uc608\uc81c \ucf54\ub4dc \uc6b0\ub9ac\uac00 \ud754\ud788 \uc811\ud558\ub294 \ud3f4\ub354\uc640 \ud30c\uc77c \uac1c\ub150\uc774\ub2e4. \ud3f4\ub354\uc640 \ud30c\uc77c\uc744 \ub3d9\uc77c\ud55c \uac1c\ub150\uc73c\ub85c \ub2e4\ub8e8\uae30 \uc704\ud574 Unit\uc774\ub77c\ub294 \ucd94\uc0c1 \ud074\ub798\uc2a4\ub97c \ub450\uace0, \ud3f4\ub354\uc640 \ud30c\uc77c\uc740 \uc774 Unit\uc744 \uc0c1\uc18d\ubc1b\uc544 \ucc98\ub9ac\ud55c\ub2e4. Folder &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=10431\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[GoF] Composite \ud328\ud134&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-10431","post","type-post","status-publish","format-standard","hentry","category-design"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10431"}],"version-history":[{"count":4,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10431\/revisions"}],"predecessor-version":[{"id":10565,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10431\/revisions\/10565"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10431"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}