{"id":25216,"date":"2023-04-29T11:07:09","date_gmt":"2023-04-29T02:07:09","guid":{"rendered":"https:\/\/m9js.shop\/blog\/?p=25216"},"modified":"2023-04-29T18:18:21","modified_gmt":"2023-04-29T09:18:21","slug":"implementing-the-state-pattern-using-java-interfaces","status":"publish","type":"post","link":"https:\/\/m9js.shop\/blog\/development\/implementing-the-state-pattern-using-java-interfaces","title":{"rendered":"Java \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud55c \uc0c1\ud0dc \ud328\ud134 \uad6c\ud604\ud558\uae30"},"content":{"rendered":"

Java\ub294 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\uc758 \ud55c \uc885\ub958\ub85c, \ub2e4\uc591\ud55c \ub514\ubc14\uc774\uc2a4\uc5d0\uc11c \uc2e4\ud589\ub420 \uc218 \uc788\ub294 \ud50c\ub7ab\ud3fc \ub3c5\ub9bd\uc801\uc778 \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \uc774\ubc88 \uae00\uc5d0\uc11c\ub294 Java\uc758 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc0c1\ud0dc \ud328\ud134\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uace0, \uc774\ub97c \uc774\uc6a9\ud55c \uc0c1\ud0dc \ud328\ud134 \uad6c\ud604 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n

Java \uc778\ud130\ud398\uc774\uc2a4\ub780 \ubb34\uc5c7\uc778\uac00?<\/h2>\n

Java \uc778\ud130\ud398\uc774\uc2a4\ub294 \ud074\ub798\uc2a4\uc640 \uc720\uc0ac\ud558\uc9c0\ub9cc, \ucd94\uc0c1 \uba54\uc11c\ub4dc\uc640 \uc0c1\uc218\ub9cc\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud55c \ud074\ub798\uc2a4\uc5d0\uc11c \ucd94\uc0c1 \uba54\uc11c\ub4dc\ub97c \ubc18\ub4dc\uc2dc \uad6c\ud604\ud558\ub3c4\ub85d \uac15\uc81c\ud558\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \ud074\ub798\uc2a4\ub4e4\uc774 \uc77c\uad00\ub41c \uba54\uc11c\ub4dc\ub97c \uc81c\uacf5\ud558\ub3c4\ub85d \ubcf4\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Java\uc5d0\uc11c \uc778\ud130\ud398\uc774\uc2a4\ub294 interface<\/code> \ud0a4\uc6cc\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

Java \uc778\ud130\ud398\uc774\uc2a4\ub294 \ub2e8\uc77c \uc0c1\uc18d\ub9cc\uc744 \uc9c0\uc6d0\ud558\uba70, \ub2e4\uc911 \uc0c1\uc18d\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc778\ud130\ud398\uc774\uc2a4 \uac04\uc5d0\ub294 \ub2e4\uc911 \uc0c1\uc18d\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub610\ud55c Java 8\ubd80\ud130\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc5d0\uc11c \ub514\ud3f4\ud2b8 \uba54\uc11c\ub4dc\uc640 \uc815\uc801 \uba54\uc11c\ub4dc\ub97c \uc9c0\uc6d0\ud558\ubbc0\ub85c, \ub354\uc6b1 \uc720\uc5f0\ud55c \uc778\ud130\ud398\uc774\uc2a4 \uc124\uacc4\uac00 \uac00\ub2a5\ud574\uc84c\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc0c1\ud0dc \ud328\ud134\uc774\ub780 \ubb34\uc5c7\uc778\uac00?<\/h2>\n

\uc0c1\ud0dc \ud328\ud134\uc740 \uac1d\uccb4\uc758 \uc0c1\ud0dc\uac00 \ubc14\ub01c\uc5d0 \ub530\ub77c \uac1d\uccb4\uc758 \ud589\ub3d9\uc744 \ubcc0\uacbd\ud558\ub294 \ub514\uc790\uc778 \ud328\ud134\uc785\ub2c8\ub2e4. \uc774 \ud328\ud134\uc740 \uc0c1\ud0dc\ub97c \ud074\ub798\uc2a4\ub85c \ud45c\ud604\ud558\uace0, \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ud589\ub3d9\uc744 \uba54\uc11c\ub4dc\ub85c \uc815\uc758\ud558\uc5ec \uad6c\ud604\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc0c1\ud0dc \uc804\ud658\uc5d0 \ub530\ub978 \ucf54\ub4dc \uc911\ubcf5\uc744 \uc904\uc774\uace0, \ud655\uc7a5\uc131 \uc788\ub294 \ucf54\ub4dc\ub97c \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n

\uc608\ub97c \ub4e4\uc5b4, \uc790\ud310\uae30\ub97c \uc0c1\ud0dc \ud328\ud134\uc73c\ub85c \uad6c\ud604\ud55c\ub2e4\uba74, \uc790\ud310\uae30\uc758 \uc0c1\ud0dc\ub294 "\ub3d9\uc804\uc774 \uc5c6\ub294 \uc0c1\ud0dc", "\ub3d9\uc804\uc774 \uc788\ub294 \uc0c1\ud0dc", "\uc74c\ub8cc\uac00 \ub098\uc624\ub294 \uc0c1\ud0dc" \ub4f1\uc73c\ub85c \ub098\ub20c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac01 \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ud589\ub3d9\uc740 \uba54\uc11c\ub4dc\ub85c \uc815\uc758\ud558\uba70, \uc790\ud310\uae30\uac00 \ub3d9\uc804\uc744 \ubc1b\uc9c0 \uc54a\uc740 \uc0c1\ud0dc\uc5d0\uc11c \uc74c\ub8cc\ub97c \uc120\ud0dd\ud558\uba74 "\ub3d9\uc804\uc744 \ub123\uc73c\uc138\uc694"\ub77c\ub294 \uc548\ub0b4 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4.<\/p>\n

Java \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud55c \uc0c1\ud0dc \ud328\ud134 \uad6c\ud604\ud558\uae30<\/h2>\n

Java \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud55c \uc0c1\ud0dc \ud328\ud134 \uad6c\ud604 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n

    \n
  1. Context \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. Context \ud074\ub798\uc2a4\ub294 \uc0c1\ud0dc \ud328\ud134\uc5d0\uc11c \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud558\uace0, \ud589\ub3d9 \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4. <\/li>\n
  2. State \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. State \uc778\ud130\ud398\uc774\uc2a4\ub294 \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ud589\ub3d9 \uba54\uc11c\ub4dc\ub97c \uc815\uc758\ud569\ub2c8\ub2e4.<\/li>\n
  3. \uac01 \uc0c1\ud0dc\uc5d0 \ud574\ub2f9\ud558\ub294 \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. \uc774 \ud074\ub798\uc2a4\ub4e4\uc740 State \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uba70, \uc0c1\ud0dc\uc5d0 \ub530\ub978 \ud589\ub3d9\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4.<\/li>\n
  4. Context \ud074\ub798\uc2a4\uc5d0\uc11c\ub294 \ud604\uc7ac \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud558\uba70, \ud589\ub3d9 \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4. \uc774\ub54c \uc0c1\ud0dc\uc5d0 \ub530\ub77c \uc801\uc808\ud55c \ud589\ub3d9 \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\ub3c4\ub85d \uad6c\ud604\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n

    \uc544\ub798\ub294 Java \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud55c \uc0c1\ud0dc \ud328\ud134\uc758 \uc608\uc2dc \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n

    interface State {\n    void insertCoin(Context context);\n    void pushButton(Context context);\n}\n\nclass NoCoinState implements State {\n    @Override\n    public void insertCoin(Context context) {\n        context.setState(new CoinInsertedState());\n    }\n    @Override\n    public void pushButton(Context context) {\n        System.out.println(\"\ub3d9\uc804\uc744 \ub123\uc73c\uc138\uc694\");\n    }\n}\n\nclass CoinInsertedState implements State {\n    @Override\n    public void insertCoin(Context context) {\n        System.out.println(\"\uc774\ubbf8 \ub3d9\uc804\uc774 \uc788\uc2b5\ub2c8\ub2e4\");\n    }\n    @Override\n    public void pushButton(Context context) {\n        System.out.println(\"\uc74c\ub8cc\uac00 \ub098\uc654\uc2b5\ub2c8\ub2e4\");\n        context.setState(new NoCoinState());\n    }\n}\n\nclass Context {\n    private State currentState;\n    public Context() {\n        currentState = new NoCoinState();\n    }\n    public void setState(State state) {\n        currentState = state;\n    }\n    public void insertCoin() {\n        currentState.insertCoin(this);\n    }\n    public void pushButton() {\n        currentState.pushButton(this);\n    }\n}<\/code><\/pre>\n

    \uc704 \ucf54\ub4dc\uc5d0\uc11c Context \ud074\ub798\uc2a4\ub294 \uc790\ud310\uae30\ub97c \ub098\ud0c0\ub0b4\uace0, State \uc778\ud130\ud398\uc774\uc2a4\ub294 \uc790\ud310\uae30\uc758 \uc0c1\ud0dc\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4. NoCoinState\uc640 CoinInsertedState\ub294 \uac01\uac01 "\ub3d9\uc804\uc774 \uc5c6\ub294 \uc0c1\ud0dc"\uc640 "\ub3d9\uc804\uc774 \uc788\ub294 \uc0c1\ud0dc"\ub97c \ub098\ud0c0\ub0b4\uba70, insertCoin()\uacfc pushButton() \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc790\ud310\uae30\uc758 \uc0c1\ud0dc \uc804\ud658\uc774 \uac00\ub2a5\ud574\uc9d1\ub2c8\ub2e4.<\/p>\n

    Java \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud55c \uc0c1\ud0dc \ud328\ud134\uc740 \uac1d\uccb4\uc9c0\ud5a5 \ub514\uc790\uc778 \ud328\ud134\uc758 \ub300\ud45c\uc801\uc778 \uc608\uc2dc \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc774\uc6a9\ud558\uc5ec \ucf54\ub4dc\uc758 \uc720\uc5f0\uc131\uacfc \ud655\uc7a5\uc131\uc744 \ub192\uc77c \uc218 \uc788\uc73c\uba70, \uc0c1\ud0dc \ud328\ud134\uc744 \uc774\uc6a9\ud558\uc5ec \uac1d\uccb4\uc758 \ud589\ub3d9\uc744 \ub3d9\uc801\uc73c\ub85c \ubcc0\uacbd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ub354\uc6b1 \ud6a8\uc728\uc801\uc778 \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uace0, \uc720\uc9c0\ubcf4\uc218\ub97c \uc6a9\uc774\ud558\uac8c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"

    \uc0c1\ud0dc \ud328\ud134\uc740 \uac1d\uccb4\uc758 \uc0c1\ud0dc \ubcc0\ud654\ub97c \ud6a8\uacfc\uc801\uc73c\ub85c \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \ub514\uc790\uc778 \ud328\ud134\uc785\ub2c8\ub2e4. Java \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc774\uc6a9\ud55c \uc0c1\ud0dc \ud328\ud134 \uad6c\ud604 \ubc29\ubc95\uc744 \uc54c\uc544\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":[45,2188,471,2584],"class_list":["post-25216","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-new","tag-public","tag-state","tag-system"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/25216","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=25216"}],"version-history":[{"count":0,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/25216\/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=25216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=25216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=25216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}