{"id":25384,"date":"2023-04-29T17:23:33","date_gmt":"2023-04-29T08:23:33","guid":{"rendered":"https:\/\/m9js.shop\/blog\/?p=25384"},"modified":"2023-04-29T18:16:45","modified_gmt":"2023-04-29T09:16:45","slug":"application-of-the-java-interface-and-state-pattern","status":"publish","type":"post","link":"https:\/\/m9js.shop\/blog\/development\/application-of-the-java-interface-and-state-pattern","title":{"rendered":"Java \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc758 \uc801\uc6a9"},"content":{"rendered":"

Java \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc758 \uc801\uc6a9<\/p>\n

Java\ub294 \uac1d\uccb4 \uc9c0\ud5a5 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\ub85c, \uc720\uc5f0\ud55c \ucf54\ub4dc \uad6c\uc870\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub294 \uae30\ub2a5\ub4e4\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \uc911\uc5d0\uc11c\ub3c4 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc740 \ucf54\ub4dc\uc758 \uc720\uc9c0\ubcf4\uc218\uc131\uacfc \ud655\uc7a5\uc131\uc744 \ub192\uc774\ub294\ub370 \ud070 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4. \uc774\ubc88 \uae00\uc5d0\uc11c\ub294 Java\uc5d0\uc11c \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \ub354 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uace0, \uc774 \ub450 \uac00\uc9c0\ub97c \uacb0\ud569\ud558\uc5ec \uc5b4\ub5bb\uac8c \uc801\uc6a9\ud558\ub294\uc9c0 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n

Java \uc778\ud130\ud398\uc774\uc2a4\uc758 \uac1c\ub150\uacfc \ud65c\uc6a9<\/h2>\n

\uc778\ud130\ud398\uc774\uc2a4\ub294 \uc77c\uc885\uc758 \ucd94\uc0c1 \ud074\ub798\uc2a4\ub85c, \ud074\ub798\uc2a4\uc640 \ub2ec\ub9ac \uba54\uc11c\ub4dc\uc758 \uad6c\ud604\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0c1\uc18d\ubc1b\ub294 \ud074\ub798\uc2a4\uc5d0\uc11c\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \uc120\uc5b8\ub41c \uba54\uc11c\ub4dc\ub97c \ubaa8\ub450 \uad6c\ud604\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc778\ud130\ud398\uc774\uc2a4\ub294 \ub2e4\ud615\uc131\uacfc \uc720\uc5f0\uc131\uc744 \uc81c\uacf5\ud558\uba70, \ucf54\ub4dc\uc758 \uacb0\ud569\ub3c4\ub97c \ub0ae\ucd94\uc5b4 \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc785\ub2c8\ub2e4.<\/p>\n

\uc778\ud130\ud398\uc774\uc2a4\uc758 \ud65c\uc6a9 \uc608\uc2dc\ub85c\ub294 \uc790\ubc14 \uceec\ub809\uc158 \ud504\ub808\uc784\uc6cc\ud06c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uceec\ub809\uc158 \ud504\ub808\uc784\uc6cc\ud06c\ub294 \ub2e4\uc591\ud55c \uc790\ub8cc\ud615\uc758 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud560 \uc218 \uc788\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud558\uba70, \uc774\ub97c \uad6c\ud604\ud55c \uc5ec\ub7ec \ud074\ub798\uc2a4\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ucf54\ub4dc\uc758 \uc7ac\uc0ac\uc6a9\uc131\uacfc \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

public interface Collection extends Iterable {\n    int size();\n    boolean isEmpty();\n    \/\/...\uc774\ud558 \uc0dd\ub7b5\n}<\/code><\/pre>\n

\uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc758 \uc815\uc758\uc640 \uc0ac\uc6a9 \uc608\uc2dc<\/h2>\n

\uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc740 \uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \ud074\ub798\uc2a4\ub85c \ub098\ub204\uc5b4 \uc815\uc758\ud558\uace0, \ud574\ub2f9 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \uac1d\uccb4\uc758 \ud589\ub3d9\uc774 \ub2ec\ub77c\uc9c0\ub3c4\ub85d \ud558\ub294 \ub514\uc790\uc778 \ud328\ud134\uc785\ub2c8\ub2e4. \uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \uc5f4\uac70\ud615\uc73c\ub85c \uc815\uc758\ud558\uace0, \uc0c1\ud0dc \uc804\ud658\uc744 \ub2f4\ub2f9\ud558\ub294 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uc5b4 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n

\uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc758 \uc0ac\uc6a9 \uc608\uc2dc\ub85c\ub294 \uc790\ud310\uae30\ub97c \ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc790\ud310\uae30\ub294 \ub3c8\uc744 \ubc1b\uace0, \uc74c\ub8cc\uc218\ub97c \uc120\ud0dd\ud558\uace0, \uc74c\ub8cc\uc218\ub97c \ubc30\ucd9c\ud558\ub294 \uc138 \uac00\uc9c0 \uc0c1\ud0dc\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc73c\ub85c \uad6c\ud604\ud558\uba74, \uac01 \uc0c1\ud0dc\ub97c \ud074\ub798\uc2a4\ub85c \uc815\uc758\ud558\uace0, \uc790\ud310\uae30 \uac1d\uccb4\ub294 \ud604\uc7ac \uc0c1\ud0dc \ud074\ub798\uc2a4\ub97c \ucc38\uc870\ud558\uc5ec \ud589\ub3d9\ud569\ub2c8\ub2e4.<\/p>\n

public enum VendingMachineState {\n    ACCEPTING_MONEY {\n        @Override\n        public void selectBeverage(VendingMachine vm, Beverage beverage) {\n            vm.setBeverage(beverage);\n            vm.setState(SELECTED_BEVERAGE);\n        }\n        \/\/...\uc774\ud558 \uc0dd\ub7b5\n    },\n    SELECTED_BEVERAGE {\n        @Override\n        public void dispenseBeverage(VendingMachine vm) {\n            Beverage beverage = vm.getBeverage();\n            int change = vm.getMoney() - beverage.getPrice();\n            System.out.println(\"Here's your \" + beverage.getName() + \" with \" + change + \" won change.\");\n            vm.setMoney(0);\n            vm.setBeverage(null);\n            vm.setState(ACCEPTING_MONEY);\n        }\n        \/\/...\uc774\ud558 \uc0dd\ub7b5\n    };\n    public void insertMoney(VendingMachine vm, int money) {\n        vm.setMoney(vm.getMoney() + money);\n    }\n    public void selectBeverage(VendingMachine vm, Beverage beverage) {\n        throw new IllegalStateException(\"Invalid state\");\n    }\n    public void dispenseBeverage(VendingMachine vm) {\n        throw new IllegalStateException(\"Invalid state\");\n    }\n}<\/code><\/pre>\n

Java \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc758 \uacb0\ud569 \ubc29\ubc95\uacfc \uc7a5\uc810<\/h2>\n

Java\uc5d0\uc11c\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uacb0\ud569\ud558\uc5ec \uc720\uc5f0\ud558\uace0 \ud655\uc7a5 \uac00\ub2a5\ud55c \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac1d\uccb4\uc758 \ud589\ub3d9\uc744 \ucd94\uc0c1\ud654\ud558\uace0, \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec \uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \uad00\ub9ac\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ucf54\ub4dc\uc758 \uc720\uc9c0\ubcf4\uc218\uc131\uacfc \ud655\uc7a5\uc131\uc744 \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

public interface VendingMachineState {\n    void insertMoney(VendingMachine vm, int money);\n    void selectBeverage(VendingMachine vm, Beverage beverage);\n    void dispenseBeverage(VendingMachine vm);\n}\n\npublic class VendingMachine {\n    private int money;\n    private Beverage beverage;\n    private VendingMachineState state;\n    \/\/...\uc774\ud558 \uc0dd\ub7b5\n    public void insertMoney(int money) {\n        state.insertMoney(this, money);\n    }\n    public void selectBeverage(Beverage beverage) {\n        state.selectBeverage(this, beverage);\n    }\n    public void dispenseBeverage() {\n        state.dispenseBeverage(this);\n    }\n    \/\/...\uc774\ud558 \uc0dd\ub7b5\n}<\/code><\/pre>\n

\uc7a5\uc810<\/h3>\n
    \n
  1. \n

    \uc720\uc5f0\uc131: \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac1d\uccb4\uc758 \ud589\ub3d9\uc744 \ucd94\uc0c1\ud654\ud558\uace0, \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec \uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \uad00\ub9ac\ud568\uc73c\ub85c\uc368, \uac1d\uccb4\uc758 \ud589\ub3d9\uacfc \uc0c1\ud0dc\ub97c \ub3c5\ub9bd\uc801\uc73c\ub85c \ud655\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/li>\n

  2. \n

    \uc720\uc9c0\ubcf4\uc218\uc131: \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucf54\ub4dc\uc758 \uacb0\ud569\ub3c4\ub97c \ub0ae\ucd94\uc5b4, \ucf54\ub4dc\uc758 \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/li>\n

  3. \n

    \ud655\uc7a5\uc131: \uc0c8\ub85c\uc6b4 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud558\uac70\ub098, \uc0c8\ub85c\uc6b4 \uc2a4\ud14c\uc774\ud2b8 \ud074\ub798\uc2a4\ub97c \ucd94\uac00\ud568\uc73c\ub85c\uc368, \uac1d\uccb4\uc758 \ud589\ub3d9\uacfc \uc0c1\ud0dc\ub97c \uc27d\uac8c \ud655\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/li>\n<\/ol>\n

    \uacb0\ub860<\/h3>\n

    Java\uc5d0\uc11c \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uacb0\ud569\ud558\uc5ec, \uc720\uc5f0\ud558\uace0 \ud655\uc7a5 \uac00\ub2a5\ud55c \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac1d\uccb4\uc758 \ud589\ub3d9\uc744 \ucd94\uc0c1\ud654\ud558\uace0, \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec \uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \uad00\ub9ac\ud568\uc73c\ub85c\uc368, \ucf54\ub4dc\uc758 \uc720\uc9c0\ubcf4\uc218\uc131\uacfc \ud655\uc7a5\uc131\uc744 \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uac1d\uccb4 \uc9c0\ud5a5 \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \uc7a5\uc810\uc744 \ucd5c\ub300\ud55c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

    \"Java <\/p>\n

    ===OUTRO:<\/p>\n","protected":false},"excerpt":{"rendered":"

    \uc790\ubc14 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc740 \uac1d\uccb4\uc9c0\ud5a5 \ub514\uc790\uc778\uc5d0\uc11c \ub9e4\uc6b0 \uc720\uc6a9\ud55c \uac1c\ub150\uc785\ub2c8\ub2e4. \uc774\ubc88 \uae00\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \uac1c\ub150\ub4e4\uc758 \uc801\uc6a9 \ubc29\ubc95\uacfc \uc7a5\uc810\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"author":1,"featured_media":12633,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1957],"tags":[2214,2188,471,2584,2028],"class_list":["post-25384","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-change","tag-public","tag-state","tag-system","tag-your"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/25384","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/comments?post=25384"}],"version-history":[{"count":0,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/25384\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media\/12633"}],"wp:attachment":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media?parent=25384"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=25384"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=25384"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}