{"id":10441,"date":"2020-10-11T20:05:22","date_gmt":"2020-10-11T11:05:22","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=10441"},"modified":"2020-10-25T09:20:42","modified_gmt":"2020-10-25T00:20:42","slug":"observer-%ed%8c%a8%ed%84%b4","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=10441","title":{"rendered":"[GoF] Observer \ud328\ud134"},"content":{"rendered":"<h4>\ud328\ud134\uba85\uce6d<\/h4>\n<p>Observer<\/p>\n<h4>\ud544\uc694\ud55c \uc0c1\ud669<\/h4>\n<p>\uc0c1\ud0dc\uac00 \ubcc0\uacbd\ub418\uba74 \uadf8 \uc0c1\ud0dc \ubcc0\uacbd\uc5d0 \ub530\ub77c \ubc18\uc751\ud558\ub294 \uad6c\uc870\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud55c \ud328\ud134\uc774\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\/observer.png\" alt=\"\" width=\"800\"  class=\"aligncenter size-full wp-image-10442\" \/><\/p>\n<p>\uc8fc\uc0ac\uc704 \uac8c\uc784\uc744 \uc608\uc81c\ub85c \ud55c\ub2e4. DicePlay\ub294 \uc8fc\uc0ac\uc704\ub97c \ub358\uc9c0\ub294 \uae30\ub2a5\uc744 \uc2e4\ud589\ud55c\ub2e4. Player\ub294 \uc8fc\uc0ac\uc704 \uac8c\uc784\uc5d0 \ucc38\uc5ec\ud558\ub294 \uc0ac\ub78c\ub4e4\uc774\ub2e4. Player\ub97c \uc0c1\uc18d\ubc1b\ub294 OddBettingPlayer\ub294 \ud640\uc218\uc5d0 \ubc30\ud305\uc744 \uac70\ub294 \uc0ac\ub78c\uc774\uace0, EvenBettingPlayer\ub294 \uc9dd\uc218\uc5d0 \ubc30\ud305\uc744 \uac70\ub294 \uc0ac\ub78c\uc774\ub2e4. \uc8fc\uc0ac\uc704 \uac8c\uc784\uc5d0 \ucc38\uc5ec\ud558\uba74, \uc8fc\uc0ac\uc704\uac00 \ub358\uc838\uc9c8\ub54c \uc790\ub3d9\uc73c\ub85c \uac8c\uc784\uc5d0 \ucc38\uc5ec\ud55c \uc0ac\ub78c\ub4e4\uc758 \uc2b9\ub9ac \uc5ec\ubd80\ub97c \uc989\uc2dc \ud655\uc778\uc774 \uac00\ub2a5\ud558\ub2e4. DicePlay \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\nimport java.util.Random;\r\n\r\npublic class DicePlay {\r\n\tprivate LinkedList&lt;Player> players = new LinkedList&lt;Player>();\r\n\tprivate Random random = new Random();\r\n\t\r\n\tpublic void addPlayer(Player player) {\r\n\t\tplayers.add(player);\r\n\t}\r\n\t\r\n\tpublic void play() {\r\n\t\tint v = random.nextInt(6) + 1;\r\n\t\t\r\n\t\tSystem.out.println(\"Dice Number: \" + v);\r\n\t\t\r\n\t\tIterator&lt;Player> iter = players.iterator();\r\n\t\twhile(iter.hasNext()) {\r\n\t\t\titer.next().update(v);\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>Player\uc758 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\">\r\npackage tstThread;\r\n\r\npublic abstract class Player {\r\n\tprivate String name;\r\n\t\r\n\tpublic Player(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 abstract void update(int n);\r\n}\r\n<\/pre>\n<p>Player\ub97c \uc0c1\uc18d\ubc1b\ub294 OddBettingPlayer \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 OddBettingPlayer extends Player {\r\n\r\n\tpublic OddBettingPlayer(String name) {\r\n\t\tsuper(name);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void update(int n) {\r\n\t\tif(n % 2 == 1) {\r\n\t\t\tSystem.out.println(getName() + \" win!\");\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>Player\ub97c \uc0c1\uc18d\ubc1b\ub294 EvenBettingPlayer \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 EvenBettingPlayer extends Player {\r\n\r\n\tpublic EvenBettingPlayer(String name) {\r\n\t\tsuper(name);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void update(int n) {\r\n\t\tif(n % 2 == 0) {\r\n\t\t\tSystem.out.println(getName() + \" win!\");\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>\uc704\uc758 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud55c \uc608\uc81c \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\tDicePlay dicePlay = new DicePlay();\r\n\t\t\r\n\t\tPlayer player1 = new EvenBettingPlayer(\"Jane\");\r\n\t\tPlayer player2 = new OddBettingPlayer(\"Suji\");\r\n\t\t\r\n\t\tdicePlay.addPlayer(player1);\r\n\t\tdicePlay.addPlayer(player2);\r\n\t\t\r\n\t\tfor(int i=0; i<10; i++) {\r\n\t\t\tdicePlay.play();\r\n\t\t\tSystem.out.println();\r\n\t\t}\t\t\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\nDice Number: 6\r\nJane win!\r\n\r\nDice Number: 1\r\nSuji win!\r\n\r\nDice Number: 5\r\nSuji win!\r\n\r\nDice Number: 6\r\nJane win!\r\n\r\nDice Number: 6\r\nJane win!\r\n\r\nDice Number: 5\r\nSuji win!\r\n\r\nDice Number: 2\r\nJane win!\r\n\r\nDice Number: 5\r\nSuji win!\r\n\r\nDice Number: 3\r\nSuji win!\r\n\r\nDice Number: 2\r\nJane win!\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 Observer \ud544\uc694\ud55c \uc0c1\ud669 \uc0c1\ud0dc\uac00 \ubcc0\uacbd\ub418\uba74 \uadf8 \uc0c1\ud0dc \ubcc0\uacbd\uc5d0 \ub530\ub77c \ubc18\uc751\ud558\ub294 \uad6c\uc870\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud55c \ud328\ud134\uc774\ub2e4. \uc608\uc81c \ucf54\ub4dc \uc8fc\uc0ac\uc704 \uac8c\uc784\uc744 \uc608\uc81c\ub85c \ud55c\ub2e4. DicePlay\ub294 \uc8fc\uc0ac\uc704\ub97c \ub358\uc9c0\ub294 \uae30\ub2a5\uc744 \uc2e4\ud589\ud55c\ub2e4. Player\ub294 \uc8fc\uc0ac\uc704 \uac8c\uc784\uc5d0 \ucc38\uc5ec\ud558\ub294 \uc0ac\ub78c\ub4e4\uc774\ub2e4. Player\ub97c \uc0c1\uc18d\ubc1b\ub294 OddBettingPlayer\ub294 \ud640\uc218\uc5d0 \ubc30\ud305\uc744 \uac70\ub294 \uc0ac\ub78c\uc774\uace0, EvenBettingPlayer\ub294 \uc9dd\uc218\uc5d0 \ubc30\ud305\uc744 \uac70\ub294 \uc0ac\ub78c\uc774\ub2e4. \uc8fc\uc0ac\uc704 \uac8c\uc784\uc5d0 \ucc38\uc5ec\ud558\uba74, \uc8fc\uc0ac\uc704\uac00 \ub358\uc838\uc9c8\ub54c \uc790\ub3d9\uc73c\ub85c \uac8c\uc784\uc5d0 \ucc38\uc5ec\ud55c \uc0ac\ub78c\ub4e4\uc758 \uc2b9\ub9ac \uc5ec\ubd80\ub97c \uc989\uc2dc &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=10441\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[GoF] Observer \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-10441","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\/10441","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=10441"}],"version-history":[{"count":5,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10441\/revisions"}],"predecessor-version":[{"id":10563,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/10441\/revisions\/10563"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10441"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}