{"id":10419,"date":"2020-10-11T00:10:57","date_gmt":"2020-10-10T15:10:57","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=10419"},"modified":"2020-10-25T09:20:57","modified_gmt":"2020-10-25T00:20:57","slug":"flyweight-%ed%8c%a8%ed%84%b4","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=10419","title":{"rendered":"[GoF] Flyweight \ud328\ud134"},"content":{"rendered":"<h4>\ud328\ud134\uba85\uce6d<\/h4>\n<p>Flyweight<\/p>\n<h4>\ud544\uc694\ud55c \uc0c1\ud669<\/h4>\n<p>\ub3d9\uc77c\ud55c \uac1d\uccb4\ub97c \uc790\uc8fc \uc0dd\uc131\ud574\uc11c \uc0ac\uc6a9\ud560\ub54c, \ub9e4\ubc88 \ub2e4\uc2dc \uc0dd\uc131\ud558\uc9c0 \uc54a\uace0 \uac1d\uccb4\ud480(Object Pool)\uc5d0 \uc800\uc7a5\ud574 \ub193\uace0 \uc7ac\ud65c\uc6a9\ud558\ub294 \ud328\ud134\uc774\ub2e4. \uba54\ubaa8\ub9ac \uc808\uc57d\uacfc \uac1d\uccb4 \uc0dd\uc131\uc2dc \uc18c\uc694\ub418\ub294 \uc2dc\uac04\uc744 \uc904\uc5ec \ud37c\ud3ec\uba3c\uc2a4\ub97c \ud5a5\uc0c1\uc2dc\ud0ac \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\/flyweight.png\" alt=\"\" width=\"800\" class=\"aligncenter size-full wp-image-10420\" \/><\/p>\n<p>Digit\ub294 0\ubd80\ud130 9\uae4c\uc9c0\uc758 \uc22b\uc790\ub97c 8&#215;8 \ub3c4\ud2b8\ubb38\uc790\ub85c \ud654\uba74\uc5d0 \ud45c\uc2dc\ud558\uae30 \uc704\ud574 \uc544\ub798\uc640 \uac19\uc740 \ud30c\uc77c(digits.txt)\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \uc77d\uc5b4\ub4e4\uc778\ub2e4.<\/p>\n<pre class='code'>\r\n0\r\n  ###   \r\n #   #  \r\n #   #  \r\n #   #  \r\n #   #  \r\n #   #  \r\n #   #  \r\n  ###   \r\n1\r\n   #    \r\n  ##    \r\n   #    \r\n   #    \r\n   #    \r\n   #    \r\n   #    \r\n  ###    \r\n2\r\n  ###   \r\n #   #  \r\n     #  \r\n     #  \r\n    #   \r\n   #    \r\n  #     \r\n #####  \r\n3\r\n  ###   \r\n #   #  \r\n     #  \r\n   ##   \r\n     #  \r\n     #  \r\n #   #  \r\n  ###    \r\n4\r\n     #  \r\n    ##  \r\n   # #  \r\n  #  #  \r\n #   #  \r\n #####  \r\n     #  \r\n     #  \r\n5\r\n #####  \r\n #      \r\n #      \r\n ####   \r\n     #  \r\n     #  \r\n #   #  \r\n  ###   \r\n6\r\n  ###   \r\n #   #  \r\n #      \r\n ####   \r\n #   #  \r\n #   #  \r\n #   #  \r\n  ###   \r\n7\r\n #####  \r\n     #  \r\n     #  \r\n    #   \r\n   #    \r\n  #     \r\n  #     \r\n  #     \r\n8\r\n  ###   \r\n #   #  \r\n #   #  \r\n  ###   \r\n #   #  \r\n #   #  \r\n #   #  \r\n  ###    \r\n9\r\n  ###   \r\n #   #  \r\n #   #  \r\n #   #  \r\n  ####  \r\n     #  \r\n #   #  \r\n  ###   \r\n<\/pre>\n<p>Digit \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.io.BufferedReader;\r\nimport java.io.FileReader;\r\nimport java.io.IOException;\r\nimport java.util.ArrayList;\r\n\r\npublic class Digit {\r\n\tprivate ArrayList&lt;String> data = new ArrayList&lt;String>();\r\n\t\r\n\tpublic Digit(int n) {\t\t\r\n\t\tFileReader fr = null;\r\n\t\tBufferedReader br = null;\r\n\t\ttry {\r\n\t\t\tfr = new FileReader(\".\/digits.txt\");\r\n\t\t\tbr = new BufferedReader(fr);\r\n\t\t\t\r\n\t\t\tint nLine = 0;\r\n\t\t\twhile((br.readLine()) != null) {\r\n\t\t\t\tif(n*9 == nLine) {\r\n\t\t\t\t\tfor(int i=0; i&lt;8; i++) {\r\n\t\t\t\t\t\tdata.add(br.readLine());\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tnLine++;\r\n\t\t\t}\r\n\t\t} catch(IOException e) {\r\n\t\t\te.printStackTrace();\r\n\t\t} finally {\r\n\t\t\ttry {\r\n\t\t\t\tif(fr != null) fr.close();\r\n\t\t\t\tif(br != null) br.close();\r\n\t\t\t} catch (IOException e) {\r\n\t\t\t\te.printStackTrace();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tpublic void print(int x, int y) {\r\n\t\tfor(int i=0; i&lt;8; i++) {\r\n\t\t\tString line = data.get(i);\r\n\t\t\tSystem.out.print(String.format(\"%c[%d;%df\",0x1B,y+i,x));\r\n\t\t\tSystem.out.print(line);\r\n\t\t}\r\n\r\n\t}\r\n}\r\n<\/pre>\n<p>DigitFactory \ud074\ub798\uc2a4\ub294 Digit \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uba70, \ud55c\ubc88 \uc0dd\uc131\ub41c \ubc88\ud638\uc758 Digit \uac1d\uccb4\ub294 \uba54\ubaa8\ub9ac \ud480\uc5d0 \uc800\uc7a5\ud574\ub450\uace0 \uc7ac\ud65c\uc6a9\ud55c\ub2e4. \uba54\ubaa8\ub9ac \ud480\uc740 HashMap\uc744 \uc0ac\uc6a9\ud588\ub2e4. \ucf54\ub4dc\ub294 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.util.HashMap;\r\n\r\npublic class DigitFactory {\r\n\tprivate HashMap&lt;Integer, Digit> pool = new HashMap&lt;Integer, Digit>();\r\n\r\n\tpublic Digit getDigit(int n) {\r\n\t\tif(pool.containsKey(n)) {\r\n\t\t\treturn pool.get(n);\r\n\t\t} else {\r\n\t\t\tDigit digit = new Digit(n);\r\n\t\t\tpool.put(n, digit);\r\n\t\t\treturn digit;\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>Number\ub294 \uc5ec\ub7ec \uac1c\uc758 Digit\ub85c \uad6c\uc131\ub41c \uc815\uc218\uac12\uc774, Number\ub97c \uad6c\uc131\ud558\ub294 Digit \uac1d\uccb4\ub294 Number\uc758 \uc0dd\uc131\uc790\uc5d0\uc11c DigitFactory \ud074\ub798\uc2a4\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ud55c\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\nimport java.util.ArrayList;\r\n\r\npublic class Number {\r\n\tprivate ArrayList&lt;Digit> digits = new ArrayList&lt;Digit>();\r\n\t\r\n\tpublic Number(int number) {\r\n\t\tDigitFactory digitFactory = new DigitFactory();\r\n\t\t\r\n\t\tString strNum = Integer.toString(number);\r\n\t\tint len = strNum.length();\r\n\t\t\r\n\t\tfor(int i=0; i&lt;len; i++) {\r\n\t\t\tint n = Character.getNumericValue(strNum.charAt(i));\r\n\t\t\tDigit digit = digitFactory.getDigit(n);\r\n\t\t\tdigits.add(digit);\r\n\t\t}\r\n\t}\r\n\t\r\n\tpublic void print(int x, int y) {\r\n\t\tint cntDigits = digits.size();\r\n\t\tfor(int i=0; i&lt;cntDigits; i++) {\r\n\t\t\tDigit digit = digits.get(i);\r\n\t\t\tdigit.print(x+(i*8), y);\r\n\t\t}\t\t\r\n\t}\r\n}\r\n<\/pre>\n<p>\uc774 \ud074\ub798\uc2a4\ub4e4\uc758 \uc0ac\uc6a9\uc740 \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\tNumber number = new Number(77063);\r\n\t\tnumber.print(20, 7);\r\n\t\t\r\n\t\tSystem.out.println();\r\n\t\tSystem.out.println();\r\n\t\tSystem.out.println();\r\n\t}\r\n}\r\n<\/pre>\n<p>\uc2e4\ud589\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/10\/flyweight_result.png\" alt=\"\" width=\"800\" class=\"aligncenter size-full wp-image-10423\" \/><\/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 Flyweight \ud544\uc694\ud55c \uc0c1\ud669 \ub3d9\uc77c\ud55c \uac1d\uccb4\ub97c \uc790\uc8fc \uc0dd\uc131\ud574\uc11c \uc0ac\uc6a9\ud560\ub54c, \ub9e4\ubc88 \ub2e4\uc2dc \uc0dd\uc131\ud558\uc9c0 \uc54a\uace0 \uac1d\uccb4\ud480(Object Pool)\uc5d0 \uc800\uc7a5\ud574 \ub193\uace0 \uc7ac\ud65c\uc6a9\ud558\ub294 \ud328\ud134\uc774\ub2e4. \uba54\ubaa8\ub9ac \uc808\uc57d\uacfc \uac1d\uccb4 \uc0dd\uc131\uc2dc \uc18c\uc694\ub418\ub294 \uc2dc\uac04\uc744 \uc904\uc5ec \ud37c\ud3ec\uba3c\uc2a4\ub97c \ud5a5\uc0c1\uc2dc\ud0ac \uc218 \uc788\ub2e4. \uc608\uc81c \ucf54\ub4dc Digit\ub294 0\ubd80\ud130 9\uae4c\uc9c0\uc758 \uc22b\uc790\ub97c 8&#215;8 \ub3c4\ud2b8\ubb38\uc790\ub85c \ud654\uba74\uc5d0 \ud45c\uc2dc\ud558\uae30 \uc704\ud574 \uc544\ub798\uc640 \uac19\uc740 \ud30c\uc77c(digits.txt)\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \uc77d\uc5b4\ub4e4\uc778\ub2e4. 0 ### # # # # # # # &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=10419\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[GoF] Flyweight \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-10419","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\/10419","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=10419"}],"version-history":[{"count":8,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10419\/revisions"}],"predecessor-version":[{"id":10566,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10419\/revisions\/10566"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10419"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}