{"id":10494,"date":"2020-10-16T11:42:21","date_gmt":"2020-10-16T02:42:21","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=10494"},"modified":"2020-10-25T09:20:04","modified_gmt":"2020-10-25T00:20:04","slug":"builder-%ed%8c%a8%ed%84%b4","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=10494","title":{"rendered":"[GoF] Builder \ud328\ud134"},"content":{"rendered":"<h4>\ud328\ud134\uba85\uce6d<\/h4>\n<p>Builder<\/p>\n<h4>\ud544\uc694\ud55c \uc0c1\ud669<\/h4>\n<p>\uc5b4\ub5a4 \uacfc\uc815 \uac70\uccd0 \ud558\ub098\uc758 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294\ub370, \uadf8 \uacfc\uc815\uc5d0 \ub300\ud55c \uc885\ub958\uac00 \ud558\ub098\uac00 \uc544\ub2cc \uc5ec\ub7ec \uac1c\uc77c\ub54c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud328\ud134\uc774\ub2e4.<\/p>\n<h4>\uc608\uc81c \ucf54\ub4dc<\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/10\/builder.png\" alt=\"\" width=\"955\" height=\"440\" class=\"aligncenter size-full wp-image-10495\" \/><\/p>\n<p>Data \ud074\ub798\uc2a4\ub294 \uc774\ub984\uacfc \ub098\uc774\uc5d0 \ub300\ud55c \ub370\uc774\ud130\ub97c \ub2f4\uace0 \uc788\ub2e4. \uc774 Data \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \uac1d\uccb4\ub97c \ud544\uc694\uc5d0 \ub530\ub77c \ud3c9\ubb38 \ubb38\uc790\uc5f4 \ud3ec\ub9f7\uc774\ub098 JSON \ud3ec\ub9f7 \ub610\ub294 XML \ud3ec\ub9f7\uc758 \ubb38\uc790\uc5f4\ub85c \uad6c\uc131\ud55c\ub2e4. \uba3c\uc800 Data \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage pattern;\r\n\r\npublic class Data {\r\n\tprivate String name;\r\n\tprivate int age;\r\n\t\r\n\tpublic Data(String name, int age) {\r\n\t\tthis.name = name;\r\n\t\tthis.age = age;\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 int getAge() {\r\n\t\treturn age;\r\n\t}\r\n}\r\n<\/pre>\n<p>Builder \ucd94\uc0c1 \ud074\ub798\uc2a4\ub294 \uc704\uc758 Data\ub97c \ub2e4\uc591\ud55c \ud3ec\ub9f7\uc73c\ub85c \uad6c\uc131\ud558\uae30 \uc704\ud55c \uacf5\ud1b5\ub41c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud558\ub294 \ubd80\ubaa8 \ud074\ub798\uc2a4\uc774\uba70 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage pattern;\r\n\r\npublic abstract class Builder {\r\n\tprotected Data data;\r\n\t\r\n\tpublic Builder(Data data) {\r\n\t\tthis.data = data;\r\n\t}\r\n\t\r\n\tpublic abstract String head();\r\n\tpublic abstract String body();\r\n\tpublic abstract String foot();\r\n}\r\n<\/pre>\n<p>\uc704\uc758 Builder \ud074\ub798\uc2a4\ub294 Facade \ud074\ub798\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294\ub370, Facade \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage pattern;\r\n\r\npublic class Facade {\r\n\tprivate Builder builder;\r\n\r\n\tpublic Facade(Builder builder) {\r\n\t\tthis.builder = builder;\r\n\t}\r\n\t\r\n\tpublic String build() {\r\n\t\tStringBuilder sb = new StringBuilder();\r\n\t\t\r\n\t\tsb.append(builder.head());\r\n\t\tsb.append(builder.body());\r\n\t\tsb.append(builder.foot());\r\n\t\t\r\n\t\treturn sb.toString();\r\n\t}\r\n}\r\n<\/pre>\n<p>Builder \ud074\ub798\uc2a4\ub97c \uad6c\ud604\ud558\ub294 \ud30c\uc0dd \ud074\ub798\uc2a4\ub97c \ubcf4\uc790. \uba3c\uc800 \ud3c9\ubb38 \ubb38\uc790\uc5f4 \ud3ec\ub9f7\uc73c\ub85c \ubb38\uc790\uc5f4\uc744 \uad6c\uc131\ud558\ub294 \ud074\ub798\uc2a4\uc778 PlainTextBuilder\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage pattern;\r\n\r\npublic class PlainTextBuilder extends Builder {\r\n\tpublic PlainTextBuilder(Data data) {\r\n\t\tsuper(data);\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic String head() {\r\n\t\treturn \"\";\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String body() {\r\n\t\tStringBuilder sb = new StringBuilder();\r\n\t\t\r\n\t\tsb.append(\"Name: \");\r\n\t\tsb.append(data.getName());\r\n\t\tsb.append(\", Age: \");\r\n\t\tsb.append(data.getAge());\r\n\t\t\r\n\t\treturn sb.toString();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String foot() {\r\n\t\treturn \"\";\r\n\t}\r\n}\r\n<\/pre>\n<p>\ub2e4\uc74c\uc740 JSON \ud3ec\ub9f7\uc73c\ub85c \uad6c\uc131\ud558\ub294 JSONBuilder \ud074\ub798\uc2a4\uc774\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage pattern;\r\n\r\npublic class JSONBuilder extends Builder {\r\n\r\n\tpublic JSONBuilder(Data data) {\r\n\t\tsuper(data);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String head() {\r\n\t\treturn \"{ \";\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String body() {\r\n\t\tStringBuilder sb = new StringBuilder();\r\n\t\t\r\n\t\tsb.append(\"\\\"Name\\\": \");\r\n\t\tsb.append(\"\\\"\" + data.getName() + \"\\\"\");\r\n\t\tsb.append(\", \\\"Age\\\": \");\r\n\t\tsb.append(data.getAge());\r\n\t\t\r\n\t\treturn sb.toString();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String foot() {\r\n\t\treturn \" }\";\r\n\t}\r\n}\r\n<\/pre>\n<p>\ub2e4\uc74c\uc740 XML \ud3ec\ub9f7\uc73c\ub85c \uad6c\uc131\ud558\ub294 XMLBuilder \ud074\ub798\uc2a4\uc774\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage pattern;\r\n\r\npublic class XMLBuilder extends Builder {\r\n\r\n\tpublic XMLBuilder(Data data) {\r\n\t\tsuper(data);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String head() {\r\n\t\tStringBuilder sb = new StringBuilder();\r\n\t\t\r\n\t\tsb.append(\"&lt;?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\");\r\n\t\tsb.append(\"&lt;DATA>\");\r\n\t\t\r\n\t\treturn sb.toString();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String body() {\r\n\t\tStringBuilder sb = new StringBuilder();\r\n\t\t\r\n\t\tsb.append(\"&lt;NAME>\");\r\n\t\tsb.append(data.getName());\r\n\t\tsb.append(\"&lt;\/NAME>\");\r\n\t\tsb.append(\"&lt;AGE>\");\r\n\t\tsb.append(data.getAge());\r\n\t\tsb.append(\"&lt;\/AGE>\");\r\n\t\t\r\n\t\treturn sb.toString();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String foot() {\r\n\t\treturn \"&lt;\/DATA>\";\r\n\t}\r\n}\r\n<\/pre>\n<p>\uc9c0\uae08\uae4c\uc9c0\uc758 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uc608\uc81c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage pattern;\r\n\r\npublic class Main {\r\n\tpublic static void main(String[] args) {\r\n\t\tData data = new Data(\"Jane\", 25);\r\n\t\t\r\n\t\tBuilder builder = new PlainTextBuilder(data);\r\n\t\tFacade facade = new Facade(builder);\r\n\t\tString result = facade.build();\r\n\t\tSystem.out.println(result);\r\n\t\t\r\n\t\tbuilder = new JSONBuilder(data);\r\n\t\tfacade = new Facade(builder);\r\n\t\tresult = facade.build();\r\n\t\tSystem.out.println(result);\r\n\t\t\r\n\t\tbuilder = new XMLBuilder(data);\r\n\t\tfacade = new Facade(builder);\r\n\t\tresult = facade.build();\r\n\t\tSystem.out.println(result);\r\n\t}\r\n}\r\n<\/pre>\n<p>\uc2e4\ud589\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class='code'>\r\nName: Jane, Age: 25\r\n{ \"Name\" :\"Jane\", \"Age\": 25 }\r\n&lt;?xml version=\"1.0\" encoding=\"utf-8\"?>&lt;DATA>&lt;NAME>Jane&lt;\/NAME>&lt;AGE>25&lt;\/AGE>&lt;\/DATA>\r\n<\/pre>\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 Builder \ud544\uc694\ud55c \uc0c1\ud669 \uc5b4\ub5a4 \uacfc\uc815 \uac70\uccd0 \ud558\ub098\uc758 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294\ub370, \uadf8 \uacfc\uc815\uc5d0 \ub300\ud55c \uc885\ub958\uac00 \ud558\ub098\uac00 \uc544\ub2cc \uc5ec\ub7ec \uac1c\uc77c\ub54c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud328\ud134\uc774\ub2e4. \uc608\uc81c \ucf54\ub4dc Data \ud074\ub798\uc2a4\ub294 \uc774\ub984\uacfc \ub098\uc774\uc5d0 \ub300\ud55c \ub370\uc774\ud130\ub97c \ub2f4\uace0 \uc788\ub2e4. \uc774 Data \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \uac1d\uccb4\ub97c \ud544\uc694\uc5d0 \ub530\ub77c \ud3c9\ubb38 \ubb38\uc790\uc5f4 \ud3ec\ub9f7\uc774\ub098 JSON \ud3ec\ub9f7 \ub610\ub294 XML \ud3ec\ub9f7\uc758 \ubb38\uc790\uc5f4\ub85c \uad6c\uc131\ud55c\ub2e4. \uba3c\uc800 Data \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. package &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=10494\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[GoF] Builder \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-10494","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\/10494","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=10494"}],"version-history":[{"count":5,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10494\/revisions"}],"predecessor-version":[{"id":10556,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10494\/revisions\/10556"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10494"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}