{"id":36198,"date":"2023-06-04T11:17:19","date_gmt":"2023-06-04T02:17:19","guid":{"rendered":"https:\/\/m9js.shop\/blog\/?p=36198"},"modified":"2023-06-04T11:17:19","modified_gmt":"2023-06-04T02:17:19","slug":"state-pattern-implemented-in-java-implementation-of-various-actions-depending-on-object-state","status":"publish","type":"post","link":"https:\/\/m9js.shop\/blog\/development\/state-pattern-implemented-in-java-implementation-of-various-actions-depending-on-object-state","title":{"rendered":"\uc790\ubc14\ub85c \uad6c\ud604\ud558\ub294 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134: \uac1d\uccb4\uc758 \uc0c1\ud0dc\uc5d0 \ub530\ub978 \ub2e4\uc591\ud55c \ub3d9\uc791 \uad6c\ud604"},"content":{"rendered":"

\uc790\ubc14\ub85c \uad6c\ud604\ud558\ub294 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134<\/h1>\n

\uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc5d0\uc11c \uac1d\uccb4\uac00 \uac00\uc9c8 \uc218 \uc788\ub294 \uc0c1\ud0dc\ub294 \ub2e4\uc591\ud558\ub2e4. \uc774\ub7ec\ud55c \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ub3d9\uc791\ub3c4 \ub2ec\ub77c\uc838\uc57c \ud55c\ub2e4. \uc774 \ub54c, \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \uac1d\uccb4\uac00 \uac00\uc9c8 \uc218 \uc788\ub294 \uc0c1\ud0dc\uc640 \uadf8 \uc0c1\ud0dc\uc5d0 \ub530\ub978 \ub3d9\uc791\uc744 \uad6c\ud604\ud560 \uc218 \uc788\ub2e4. \uc774\ubc88 \uae00\uc5d0\uc11c\ub294 \uc790\ubc14\ub85c \uad6c\ud604\ud558\ub294 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0b4\ud3b4\ubcf4\uace0, \uac1d\uccb4 \uc0c1\ud0dc\uc5d0 \ub530\ub978 \ub2e4\uc591\ud55c \ub3d9\uc791\uc744 \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc790.<\/p>\n

\uac1d\uccb4 \uc0c1\ud0dc\uc5d0 \ub530\ub978 \ub2e4\uc591\ud55c \ub3d9\uc791 \uad6c\ud604<\/h2>\n

\uac1d\uccb4\uac00 \uac00\uc9c8 \uc218 \uc788\ub294 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ub3d9\uc791\uc774 \ub2ec\ub77c\uc838\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \uc788\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ub85c\uadf8\uc778, \ub85c\uadf8\uc544\uc6c3, \ud68c\uc6d0\uac00\uc785 \ub4f1 \ub2e4\uc591\ud55c \ub3d9\uc791\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub2e4. \uc774\ub54c, \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \uac1d\uccb4\uac00 \uac00\uc9c8 \uc218 \uc788\ub294 \uc0c1\ud0dc\uc640 \uadf8 \uc0c1\ud0dc\uc5d0 \ub530\ub978 \ub3d9\uc791\uc744 \uad6c\ud604\ud560 \uc218 \uc788\ub2e4.<\/p>\n

\uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc740 \uac1d\uccb4\uc9c0\ud5a5 \ub514\uc790\uc778 \ud328\ud134 \uc911 \ud558\ub098\ub85c, \uac1d\uccb4\uc758 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ub2e4\uc591\ud55c \ub3d9\uc791\uc744 \uc218\ud589\ud560 \uc218 \uc788\ub3c4\ub85d \uad6c\ud604\ud558\ub294 \ud328\ud134\uc774\ub2e4. \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc740 \uc0c1\ud0dc \ud328\ud134\uc774\ub77c\uace0\ub3c4 \ubd88\ub9ac\uba70, \uac1d\uccb4\uac00 \uac00\uc9c8 \uc218 \uc788\ub294 \uc0c1\ud0dc\ub97c \ud074\ub798\uc2a4\ub85c \uc815\uc758\ud558\uace0, \uc0c1\ud0dc\ub97c \ubcc0\uacbd\ud560 \ub54c\ub9c8\ub2e4 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ub2e4\ub978 \ub3d9\uc791\uc744 \uc218\ud589\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uad6c\ud604\ub41c\ub2e4.<\/p>\n

\uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc758 \uad6c\uc870\uc640 \uc7a5\ub2e8\uc810<\/h2>\n

\uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc740 \ud06c\uac8c \uc138 \uac00\uc9c0 \uc5ed\ud560\ub85c \ub098\ub20c \uc218 \uc788\ub2e4. \uccab\uc9f8, Context\ub294 \uc0c1\ud0dc\ub97c \uac00\uc9c0\uace0 \uc788\ub294 \uac1d\uccb4\uc774\ub2e4. \ub458\uc9f8, State\ub294 \uc0c1\ud0dc\ub97c \ub098\ud0c0\ub0b4\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc774\ub2e4. \uc14b\uc9f8, ConcreteState\ub294 State\ub97c \uad6c\ud604\ud55c \ud074\ub798\uc2a4\uc774\ub2e4. \uc774\ub7ec\ud55c \uc5ed\ud560\ub4e4\ub85c \uad6c\uc131\ub41c \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc740 \uac1d\uccb4\uac00 \uac00\uc9c8 \uc218 \uc788\ub294 \uc0c1\ud0dc\uc640 \uc0c1\ud0dc\uc5d0 \ub530\ub978 \ub3d9\uc791\uc744 \uad6c\ud604\ud558\uae30\uc5d0 \ub9e4\uc6b0 \uc720\uc6a9\ud558\ub2e4.<\/p>\n

\uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc758 \uc7a5\uc810 \uc911 \ud558\ub098\ub294 \uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \uc27d\uac8c \ucd94\uac00\ud558\uac70\ub098 \ubcc0\uacbd\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc774\ub2e4. \ub610\ud55c, \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ub2e4\ub978 \ub3d9\uc791\uc744 \uc27d\uac8c \uad6c\ud604\ud560 \uc218 \uc788\uc73c\uba70, \uc0c1\ud0dc \uc804\uc774\ub97c \uba85\ud655\ud558\uac8c \uc815\uc758\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\ub3c4 \uc7a5\uc810 \uc911 \ud558\ub098\uc774\ub2e4. \ud558\uc9c0\ub9cc, \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc740 \uc0c1\ud0dc\uac00 \ub9ce\uc544\uc9c8\uc218\ub85d \ud074\ub798\uc2a4\uc758 \uc218\uac00 \ub298\uc5b4\ub098\uac8c \ub418\ub294 \ub2e8\uc810\ub3c4 \uc788\ub2e4.<\/p>\n

\uc790\ubc14\uc5d0\uc11c\uc758 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134 \uc801\uc6a9 \uc0ac\ub840 \ubc0f \uc608\uc81c \ucf54\ub4dc<\/h2>\n

\uc790\ubc14\uc5d0\uc11c \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc801\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uc790. \uc608\ub97c \ub4e4\uc5b4, \ub85c\uadf8\uc778 \uae30\ub2a5\uc744 \uad6c\ud604\ud55c\ub2e4\uace0 \uac00\uc815\ud574\ubcf4\uc790. \ub85c\uadf8\uc778 \uae30\ub2a5\uc740 \ub85c\uadf8\uc778 \uc0c1\ud0dc\uc640 \ub85c\uadf8\uc544\uc6c3 \uc0c1\ud0dc\ub85c \ub098\ub25c\ub2e4. \uc774\ub54c, \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uad6c\ud604\ud560 \uc218 \uc788\ub2e4.<\/p>\n

public interface LoginState {\n    void login();\n    void logout();\n}\n\npublic class LoggedOutState implements LoginState {\n    private LoginContext context;\n\n    public LoggedOutState(LoginContext context) {\n        this.context = context;\n    }\n\n    @Override\n    public void login() {\n        System.out.println(\"\ub85c\uadf8\uc778 \uc2dc\ub3c4 \uc911...\");\n        if (\ub85c\uadf8\uc778 \uc131\uacf5) {\n            System.out.println(\"\ub85c\uadf8\uc778 \uc131\uacf5\");\n            context.setState(new LoggedInState(context));\n        } else {\n            System.out.println(\"\ub85c\uadf8\uc778 \uc2e4\ud328\");\n        }\n    }\n\n    @Override\n    public void logout() {\n        System.out.println(\"\uc774\ubbf8 \ub85c\uadf8\uc544\uc6c3 \uc0c1\ud0dc\uc785\ub2c8\ub2e4.\");\n    }\n}\n\npublic class LoggedInState implements LoginState {\n    private LoginContext context;\n\n    public LoggedInState(LoginContext context) {\n        this.context = context;\n    }\n\n    @Override\n    public void login() {\n        System.out.println(\"\uc774\ubbf8 \ub85c\uadf8\uc778 \uc0c1\ud0dc\uc785\ub2c8\ub2e4.\");\n    }\n\n    @Override\n    public void logout() {\n        System.out.println(\"\ub85c\uadf8\uc544\uc6c3 \uc2dc\ub3c4 \uc911...\");\n        if (\ub85c\uadf8\uc544\uc6c3 \uc131\uacf5) {\n            System.out.println(\"\ub85c\uadf8\uc544\uc6c3 \uc131\uacf5\");\n            context.setState(new LoggedOutState(context));\n        } else {\n            System.out.println(\"\ub85c\uadf8\uc544\uc6c3 \uc2e4\ud328\");\n        }\n    }\n}\n\npublic class LoginContext {\n    private LoginState state;\n\n    public LoginContext() {\n        this.state = new LoggedOutState(this);\n    }\n\n    public void setState(LoginState state) {\n        this.state = state;\n    }\n\n    public void login() {\n        state.login();\n    }\n\n    public void logout() {\n        state.logout();\n    }\n}\n\npublic class Main {\n    public static void main(String[] args) {\n        LoginContext context = new LoginContext();\n        context.login();\n        context.logout();\n        context.logout();\n        context.login();\n    }\n}<\/code><\/pre>\n

\uc704\uc758 \ucf54\ub4dc\ub294 \ub85c\uadf8\uc778 \uae30\ub2a5\uc744 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc73c\ub85c \uad6c\ud604\ud55c \uc608\uc81c\uc774\ub2e4. LoginState\ub294 \uc0c1\ud0dc\ub97c \ub098\ud0c0\ub0b4\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc774\uace0, LoggedOutState\uc640 LoggedInState\ub294 State\ub97c \uad6c\ud604\ud55c \ud074\ub798\uc2a4\uc774\ub2e4. LoginContext\ub294 \uc0c1\ud0dc\ub97c \uac00\uc9c0\uace0 \uc788\ub294 \uac1d\uccb4\uc774\uba70, setState \uba54\uc18c\ub4dc\ub97c \ud1b5\ud574 \uc0c1\ud0dc\ub97c \ubcc0\uacbd\ud560 \uc218 \uc788\ub2e4. Main \ud074\ub798\uc2a4\uc5d0\uc11c\ub294 LoginContext\ub97c \uc0dd\uc131\ud558\uace0 \ub85c\uadf8\uc778\uacfc \ub85c\uadf8\uc544\uc6c3\uc744 \uc218\ud589\ud55c\ub2e4.<\/p>\n

\uc774\ubc88 \uae00\uc5d0\uc11c\ub294 \uc790\ubc14\ub85c \uad6c\ud604\ud558\ub294 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0b4\ud3b4\ubcf4\uc558\ub2e4. \uac1d\uccb4\uc758 \uc0c1\ud0dc\uc5d0 \ub530\ub978 \ub2e4\uc591\ud55c \ub3d9\uc791\uc744 \uad6c\ud604\ud560 \ub54c \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \ub9e4\uc6b0 \uc720\uc6a9\ud558\ub2e4. \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134\uc740 \uac1d\uccb4\uc9c0\ud5a5 \ub514\uc790\uc778 \ud328\ud134 \uc911 \ud558\ub098\uc774\uba70, \uac1d\uccb4\uac00 \uac00\uc9c8 \uc218 \uc788\ub294 \uc0c1\ud0dc\ub97c \ud074\ub798\uc2a4\ub85c \uc815\uc758\ud558\uace0, \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ub2e4\ub978 \ub3d9\uc791\uc744 \uc218\ud589\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uad6c\ud604\ub41c\ub2e4. \uc774\ub97c \ud1b5\ud574 \uac1d\uccb4\uc758 \uc0c1\ud0dc\ub97c \uc27d\uac8c \ucd94\uac00\ud558\uac70\ub098 \ubcc0\uacbd\ud560 \uc218 \uc788\uc73c\uba70, \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ub2e4\ub978 \ub3d9\uc791\uc744 \uc27d\uac8c \uad6c\ud604\ud560 \uc218 \uc788\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"

\uc790\ubc14\ub85c \uad6c\ud604\ud558\ub294 \uc2a4\ud14c\uc774\ud2b8 \ud328\ud134: \uac1d\uccb4\uc758 \uc0c1\ud0dc\uc5d0 \ub530\ub978 \ub2e4\uc591\ud55c \ub3d9\uc791 \uad6c\ud604<\/p>\n","protected":false},"author":1,"featured_media":33704,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1957],"tags":[2188,471,3888,2584,5925,5979,3414],"class_list":["post-36198","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-public","tag-state","tag-static","tag-system","tag-5925","tag-5979","tag-3414"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/36198","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=36198"}],"version-history":[{"count":1,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/36198\/revisions"}],"predecessor-version":[{"id":36319,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/36198\/revisions\/36319"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media\/33704"}],"wp:attachment":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media?parent=36198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=36198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=36198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}