{"id":50800,"date":"2024-08-10T16:43:07","date_gmt":"2024-08-10T07:43:07","guid":{"rendered":"https:\/\/m9js.shop\/blog\/development\/a-practical-approach-to-state-patterns-for-managing-complex-state-transitions"},"modified":"2024-08-10T16:43:07","modified_gmt":"2024-08-10T07:43:07","slug":"a-practical-approach-to-state-patterns-for-managing-complex-state-transitions","status":"publish","type":"post","link":"https:\/\/m9js.shop\/blog\/development\/a-practical-approach-to-state-patterns-for-managing-complex-state-transitions","title":{"rendered":"\ubcf5\uc7a1\ud55c \uc0c1\ud0dc \uc804\ud658 \uad00\ub9ac\ub97c \uc704\ud55c \uc0c1\ud0dc \ud328\ud134\uc758 \uc2e4\uc6a9\uc801 \uc811\uadfc"},"content":{"rendered":"
\uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc5d0\uc11c \uc0c1\ud0dc \uc804\ud658 \uad00\ub9ac\ub294 \ub9e4\uc6b0 \uc911\uc694\ud55c \uc694\uc18c\uc785\ub2c8\ub2e4. \ud2b9\ud788 \ubcf5\uc7a1\ud55c \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub294 \ub2e4\uc591\ud55c \uc0c1\ud0dc\uac00 \uc874\uc7ac\ud558\uace0, \uc774\ub4e4 \uac04\uc758 \uc804\ud658\uc774 \ube48\ubc88\ud558\uac8c \ubc1c\uc0dd\ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc0c1\ud669\uc5d0\uc11c \uc0c1\ud0dc \ud328\ud134\uc740 \ud6a8\uacfc\uc801\uc778 \ud574\uacb0\ucc45\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubcf8 \uae00\uc5d0\uc11c\ub294 \uc0c1\ud0dc \ud328\ud134\uc758 \uac1c\ub150, \uc7a5\uc810, \uad6c\ud604 \ubc29\ubc95, \uadf8\ub9ac\uace0 \uc2e4\uc81c \uc0ac\ub840\ub97c \ud1b5\ud574 \ubcf5\uc7a1\ud55c \uc0c1\ud0dc \uc804\ud658 \uad00\ub9ac\ub97c \uc5b4\ub5bb\uac8c \ud6a8\uc728\uc801\uc73c\ub85c \ud560 \uc218 \uc788\ub294\uc9c0\uc5d0 \ub300\ud574 \uc2ec\ub3c4 \uc788\uac8c \ub2e4\ub8e8\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc0c1\ud0dc \ud328\ud134(State Pattern)\uc740 \uac1d\uccb4\uc758 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ud589\ub3d9\uc744 \ubcc0\uacbd\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \ub514\uc790\uc778 \ud328\ud134\uc785\ub2c8\ub2e4. \uc774 \ud328\ud134\uc740 \uac1d\uccb4\uac00 \ub0b4\ubd80 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ub3d9\uc791\uc744 \ubcc0\uacbd\ud560 \uc218 \uc788\uac8c \ud574\uc8fc\uba70, \uc0c1\ud0dc \uc804\ud658\uc744 \uad00\ub9ac\ud558\ub294 \ub370 \uc720\uc6a9\ud569\ub2c8\ub2e4. \uc0c1\ud0dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \uc870\uac74\ubb38\uc744 \uc904\uc774\uace0, \uac01 \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uc5ec \ucf54\ub4dc\uc758 \uac00\ub3c5\uc131\uacfc \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc0c1\ud0dc \ud328\ud134\uc740 \uc8fc\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uc0c1\ud669\uc5d0\uc11c \uc0ac\uc6a9\ub429\ub2c8\ub2e4:<\/p>\n
\uc0c1\ud0dc \ud328\ud134\uc740 \uc8fc\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uad6c\uc131 \uc694\uc18c\ub85c \uc774\ub8e8\uc5b4\uc838 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n
\uc0c1\ud0dc \ud328\ud134\uc740 \uc5ec\ub7ec \uac00\uc9c0 \uc7a5\uc810\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uccab\uc9f8, \ucf54\ub4dc\uc758 \uac00\ub3c5\uc131\uc744 \ub192\uc785\ub2c8\ub2e4. \uac01 \uc0c1\ud0dc\ub97c \ubcc4\ub3c4\uc758 \ud074\ub798\uc2a4\ub85c \ubd84\ub9ac\ud568\uc73c\ub85c\uc368, \uac01 \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ub85c\uc9c1\uc744 \uba85\ud655\ud558\uac8c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub458\uc9f8, \uc720\uc9c0\ubcf4\uc218\uc131\uc774 \ud5a5\uc0c1\ub429\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \uc0c1\ud0dc\ub97c \ucd94\uac00\ud558\uac70\ub098 \uae30\uc874 \uc0c1\ud0dc\ub97c \uc218\uc815\ud560 \ub54c, \ub2e4\ub978 \uc0c1\ud0dc\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uace0 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc791\uc5c5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc14b\uc9f8, \uc870\uac74\ubb38\uc744 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc804\ud1b5\uc801\uc778 \ubc29\ubc95\uc73c\ub85c\ub294 \uc5ec\ub7ec \uc870\uac74\ubb38\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc0c1\ud0dc\ub97c \uad00\ub9ac\ud558\uc9c0\ub9cc, \uc0c1\ud0dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uba74 \uac01 \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ud074\ub798\uc2a4\ub97c \ud1b5\ud574 \uc870\uac74\ubb38\uc744 \ub300\uccb4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub137\uc9f8, \ud14c\uc2a4\ud2b8\uac00 \uc6a9\uc774\ud574\uc9d1\ub2c8\ub2e4. \uac01 \uc0c1\ud0dc\uac00 \ub3c5\ub9bd\uc801\uc778 \ud074\ub798\uc2a4\ub85c \uad6c\ud604\ub418\uae30 \ub54c\ubb38\uc5d0, \uac1c\ubcc4\uc801\uc73c\ub85c \ud14c\uc2a4\ud2b8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc0c1\ud0dc \ud328\ud134\uc744 \uad6c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 \uba3c\uc800 Context \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774 \ud074\ub798\uc2a4\ub294 \ud604\uc7ac \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud558\uace0, \uc0c1\ud0dc \uc804\ud658\uc744 \uad00\ub9ac\ud558\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4. \ub2e4\uc74c\uc73c\ub85c State \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud558\uace0, \uc774\ub97c \uad6c\ud604\ud558\ub294 ConcreteState \ud074\ub798\uc2a4\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n
\nclass Context {\n private State state;\n\n public Context(State state) {\n this.state = state;\n }\n\n public void setState(State state) {\n this.state = state;\n }\n\n public void request() {\n state.handle(this);\n }\n}\n\ninterface State {\n void handle(Context context);\n}\n\nclass ConcreteStateA implements State {\n public void handle(Context context) {\n System.out.println(\"State A handling request.\");\n context.setState(new ConcreteStateB());\n }\n}\n\nclass ConcreteStateB implements State {\n public void handle(Context context) {\n System.out.println(\"State B handling request.\");\n context.setState(new ConcreteStateA());\n }\n}\n<\/code><\/pre>\n\uc704\uc758 \uc608\uc81c\uc5d0\uc11c Context \ud074\ub798\uc2a4\ub294 \ud604\uc7ac \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud558\uace0, \uc694\uccad\uc774 \ub4e4\uc5b4\uc62c \ub54c \ud574\ub2f9 \uc0c1\ud0dc\uc758 handle \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4. ConcreteStateA\uc640 ConcreteStateB\ub294 \uac01\uac01\uc758 \uc0c1\ud0dc\ub97c \uad6c\ud604\ud558\uba70, \uc0c1\ud0dc \uc804\ud658\uc744 \uad00\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n
4. \uc2e4\uc81c \uc0ac\ub840 \uc5f0\uad6c: \uac8c\uc784 \uac1c\ubc1c\uc5d0\uc11c\uc758 \uc0c1\ud0dc \ud328\ud134<\/h2>\n
\uac8c\uc784 \uac1c\ubc1c\uc5d0\uc11c\ub294 \uce90\ub9ad\ud130\uc758 \uc0c1\ud0dc \uad00\ub9ac\uac00 \ub9e4\uc6b0 \uc911\uc694\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uce90\ub9ad\ud130\ub294 ‘\ub300\uae30’, ‘\uc774\ub3d9’, ‘\uacf5\uaca9’, ‘\ubc29\uc5b4’\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \uc0c1\ud0dc\ub97c \uac00\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc0c1\ud0dc\ub97c \ud6a8\uacfc\uc801\uc73c\ub85c \uad00\ub9ac\ud558\uae30 \uc704\ud574 \uc0c1\ud0dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uce90\ub9ad\ud130\uc758 \uc0c1\ud0dc\ub97c \uad00\ub9ac\ud558\ub294 Context \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0, \uac01 \uc0c1\ud0dc\uc5d0 \ub300\ud55c ConcreteState \ud074\ub798\uc2a4\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uce90\ub9ad\ud130\uc758 \ud589\ub3d9\uc744 \uba85\ud655\ud558\uac8c \uc815\uc758\ud558\uace0, \uc0c1\ud0dc \uc804\ud658\uc744 \uc27d\uac8c \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\nclass CharacterContext {\n private CharacterState state;\n\n public CharacterContext(CharacterState state) {\n this.state = state;\n }\n\n public void setState(CharacterState state) {\n this.state = state;\n }\n\n public void performAction() {\n state.perform(this);\n }\n}\n\ninterface CharacterState {\n void perform(CharacterContext context);\n}\n\nclass IdleState implements CharacterState {\n public void perform(CharacterContext context) {\n System.out.println(\"Character is idle.\");\n context.setState(new MoveState());\n }\n}\n\nclass MoveState implements CharacterState {\n public void perform(CharacterContext context) {\n System.out.println(\"Character is moving.\");\n context.setState(new AttackState());\n }\n}\n\nclass AttackState implements CharacterState {\n public void perform(CharacterContext context) {\n System.out.println(\"Character is attacking.\");\n context.setState(new IdleState());\n }\n}\n<\/code><\/pre>\n\uc704\uc758 \uc608\uc81c\uc5d0\uc11c \uce90\ub9ad\ud130\ub294 IdleState\uc5d0\uc11c \uc2dc\uc791\ud558\uc5ec MoveState\ub85c \uc804\ud658\ub418\uace0, \uc774\ud6c4 AttackState\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubc29\uc2dd\uc73c\ub85c \uce90\ub9ad\ud130\uc758 \ud589\ub3d9\uc744 \uba85\ud655\ud558\uac8c \uc815\uc758\ud558\uace0, \uc0c1\ud0dc \uc804\ud658\uc744 \uc27d\uac8c \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
5. \ubcf5\uc7a1\ud55c \uc2dc\uc2a4\ud15c\uc5d0\uc11c\uc758 \uc0c1\ud0dc \ud328\ud134 \ud65c\uc6a9<\/h2>\n
\ubcf5\uc7a1\ud55c \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub294 \uc5ec\ub7ec \uac1c\uc758 \uc0c1\ud0dc\uac00 \ub3d9\uc2dc\uc5d0 \uc874\uc7ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uacbd\uc6b0, \uc0c1\ud0dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec \uac01 \uc0c1\ud0dc\ub97c \ub3c5\ub9bd\uc801\uc73c\ub85c \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc8fc\ubb38 \ucc98\ub9ac \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub294 ‘\uc8fc\ubb38 \uc0dd\uc131’, ‘\uc8fc\ubb38 \uacb0\uc81c’, ‘\uc8fc\ubb38 \ubc30\uc1a1’, ‘\uc8fc\ubb38 \uc644\ub8cc’\uc640 \uac19\uc740 \uc5ec\ub7ec \uc0c1\ud0dc\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.<\/p>\n
\uc8fc\ubb38 \ucc98\ub9ac \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uac01 \uc0c1\ud0dc\ub97c \uad00\ub9ac\ud558\uae30 \uc704\ud574 Context \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\uace0, \uac01 \uc0c1\ud0dc\uc5d0 \ub300\ud55c ConcreteState \ud074\ub798\uc2a4\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc8fc\ubb38\uc758 \uac01 \ub2e8\uacc4\uc5d0\uc11c \ubc1c\uc0dd\ud558\ub294 \uc774\ubca4\ud2b8\ub97c \ud6a8\uacfc\uc801\uc73c\ub85c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\nclass OrderContext {\n private OrderState state;\n\n public OrderContext(OrderState state) {\n this.state = state;\n }\n\n public void setState(OrderState state) {\n this.state = state;\n }\n\n public void processOrder() {\n state.process(this);\n }\n}\n\ninterface OrderState {\n void process(OrderContext context);\n}\n\nclass CreatedState implements OrderState {\n public void process(OrderContext context) {\n System.out.println(\"Order created.\");\n context.setState(new PaidState());\n }\n}\n\nclass PaidState implements OrderState {\n public void process(OrderContext context) {\n System.out.println(\"Order paid.\");\n context.setState(new ShippedState());\n }\n}\n\nclass ShippedState implements OrderState {\n public void process(OrderContext context) {\n System.out.println(\"Order shipped.\");\n context.setState(new CompletedState());\n }\n}\n\nclass CompletedState implements OrderState {\n public void process(OrderContext context) {\n System.out.println(\"Order completed.\");\n }\n}\n<\/code><\/pre>\n\uc704\uc758 \uc608\uc81c\uc5d0\uc11c \uc8fc\ubb38\uc740 CreatedState\uc5d0\uc11c \uc2dc\uc791\ud558\uc5ec PaidState\ub85c \uc804\ud658\ub418\uace0, \uc774\ud6c4 ShippedState\uc640 CompletedState\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubc29\uc2dd\uc73c\ub85c \uc8fc\ubb38 \ucc98\ub9ac \uc2dc\uc2a4\ud15c\uc758 \uac01 \ub2e8\uacc4\ub97c \uba85\ud655\ud558\uac8c \uc815\uc758\ud558\uace0, \uc0c1\ud0dc \uc804\ud658\uc744 \uc27d\uac8c \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
6. \uc0c1\ud0dc \ud328\ud134\uacfc \ub2e4\ub978 \ub514\uc790\uc778 \ud328\ud134 \ube44\uad50<\/h2>\n
\uc0c1\ud0dc \ud328\ud134\uc740 \ub2e4\ub978 \ub514\uc790\uc778 \ud328\ud134\uacfc \ube44\uad50\ud588\uc744 \ub54c \uba87 \uac00\uc9c0 \ucc28\ubcc4\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \uc804\ub7b5 \ud328\ud134(Strategy Pattern)\uc740 \uc54c\uace0\ub9ac\uc998\uc744 \ucea1\uc290\ud654\ud558\uc5ec \uc11c\ub85c \uad50\ud658 \uac00\ub2a5\ud558\uac8c \ub9cc\ub4dc\ub294 \ubc18\uba74, \uc0c1\ud0dc \ud328\ud134\uc740 \uac1d\uccb4\uc758 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ud589\ub3d9\uc744 \ubcc0\uacbd\ud569\ub2c8\ub2e4. \uc989, \uc804\ub7b5 \ud328\ud134\uc740 \uc54c\uace0\ub9ac\uc998\uc758 \ubcc0\uacbd\uc5d0 \uc911\uc810\uc744 \ub450\uace0, \uc0c1\ud0dc \ud328\ud134\uc740 \uac1d\uccb4\uc758 \uc0c1\ud0dc \ubcc0\ud654\uc5d0 \uc911\uc810\uc744 \ub461\ub2c8\ub2e4.<\/p>\n
\ub610\ud55c, \ucee4\ub9e8\ub4dc \ud328\ud134(Command Pattern)\uc740 \uc694\uccad\uc744 \uac1d\uccb4\ub85c \ucea1\uc290\ud654\ud558\uc5ec \uc694\uccad\uc758 \ub9e4\uac1c\ubcc0\uc218\ub97c \uc800\uc7a5\ud558\uac70\ub098 \ub85c\uadf8\ub97c \ub0a8\uae30\ub294 \ub370 \uc720\uc6a9\ud569\ub2c8\ub2e4. \ubc18\uba74, \uc0c1\ud0dc \ud328\ud134\uc740 \uac1d\uccb4\uc758 \ub0b4\ubd80 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ud589\ub3d9\uc744 \ubcc0\uacbd\ud558\ub294 \ub370 \uc911\uc810\uc744 \ub461\ub2c8\ub2e4.<\/p>\n
\uc0c1\ud0dc \ud328\ud134\uacfc \uc635\uc800\ubc84 \ud328\ud134(Observer Pattern)\ub3c4 \ube44\uad50\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc635\uc800\ubc84 \ud328\ud134\uc740 \uac1d\uccb4 \uac04\uc758 \uc77c\ub300\ub2e4 \uad00\uacc4\ub97c \uc815\uc758\ud558\uc5ec \ud55c \uac1d\uccb4\uc758 \uc0c1\ud0dc \ubcc0\ud654\uac00 \ub2e4\ub978 \uac1d\uccb4\uc5d0 \uc790\ub3d9\uc73c\ub85c \ud1b5\uc9c0\ub418\ub3c4\ub85d \ud569\ub2c8\ub2e4. \ubc18\uba74, \uc0c1\ud0dc \ud328\ud134\uc740 \uac1d\uccb4\uc758 \ub0b4\ubd80 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ud589\ub3d9\uc744 \ubcc0\uacbd\ud558\ub294 \ub370 \uc911\uc810\uc744 \ub461\ub2c8\ub2e4.<\/p>\n
7. \uc0c1\ud0dc \ud328\ud134\uc758 \ub2e8\uc810 \ubc0f \uace0\ub824\uc0ac\ud56d<\/h2>\n
\uc0c1\ud0dc \ud328\ud134\uc740 \ub9ce\uc740 \uc7a5\uc810\uc744 \uc81c\uacf5\ud558\uc9c0\ub9cc \uba87 \uac00\uc9c0 \ub2e8\uc810\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uccab\uc9f8, \ud074\ub798\uc2a4 \uc218\uac00 \uc99d\uac00\ud569\ub2c8\ub2e4. \uac01 \uc0c1\ud0dc\ub97c \ubcc4\ub3c4\uc758 \ud074\ub798\uc2a4\ub85c \uad6c\ud604\ud574\uc57c \ud558\ubbc0\ub85c \ud074\ub798\uc2a4 \uc218\uac00 \ub9ce\uc544\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ucf54\ub4dc\uc758 \ubcf5\uc7a1\uc131\uc744 \uc99d\uac00\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\ub458\uc9f8, \ubaa8\ub4e0 \uc0c1\ud0dc\ub97c \ubbf8\ub9ac \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \uc0c1\ud0dc\uac00 \ucd94\uac00\ub420 \uacbd\uc6b0 \uae30\uc874 \ucf54\ub4dc\ub97c \uc218\uc815\ud574\uc57c \ud558\ubbc0\ub85c \uc720\uc5f0\uc131\uc774 \ub5a8\uc5b4\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc14b\uc9f8, \ubcf5\uc7a1\ud55c \uc0c1\ud0dc \uc804\ud658 \ub85c\uc9c1\uc774 \ud544\uc694\ud55c \uacbd\uc6b0\uc5d0\ub294 \uc624\ud788\ub824 \ucf54\ub4dc\uac00 \ubcf5\uc7a1\ud574\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\ub530\ub77c\uc11c \uc0c1\ud0dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud560 \ub54c\ub294 \uc774\ub7ec\ud55c \ub2e8\uc810\uc744 \uace0\ub824\ud574\uc57c \ud558\uba70, \uc0c1\ud669\uc5d0 \ub9de\uac8c \uc801\uc808\ud788 \uc801\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n
8. \uacb0\ub860 \ubc0f \uc694\uc57d<\/h2>\n
\uc0c1\ud0dc \ud328\ud134\uc740 \ubcf5\uc7a1\ud55c \uc0c1\ud0dc \uc804\ud658 \uad00\ub9ac\ub97c \uc704\ud55c \ud6a8\uacfc\uc801\uc778 \ub514\uc790\uc778 \ud328\ud134\uc785\ub2c8\ub2e4. \uc774 \ud328\ud134\uc740 \ucf54\ub4dc\uc758 \uac00\ub3c5\uc131\uacfc \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ub192\uc774\uba70, \uc870\uac74\ubb38\uc744 \uc904\uc774\uace0 \ud14c\uc2a4\ud2b8\ub97c \uc6a9\uc774\ud558\uac8c \ud569\ub2c8\ub2e4. \uac8c\uc784 \uac1c\ubc1c\uc774\ub098 \uc8fc\ubb38 \ucc98\ub9ac \uc2dc\uc2a4\ud15c\uacfc \uac19\uc740 \ub2e4\uc591\ud55c \ubd84\uc57c\uc5d0\uc11c \uc720\uc6a9\ud558\uac8c \ud65c\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc0c1\ud0dc \ud328\ud134\uc744 \uad6c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 Context \ud074\ub798\uc2a4\uc640 State \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud558\uace0, \uac01 \uc0c1\ud0dc\uc5d0 \ub300\ud55c ConcreteState \ud074\ub798\uc2a4\ub97c \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uac1d\uccb4\uc758 \ub0b4\ubd80 \uc0c1\ud0dc\uc5d0 \ub530\ub77c \ud589\ub3d9\uc744 \ubcc0\uacbd\ud560 \uc218 \uc788\uc73c\uba70, \ubcf5\uc7a1\ud55c \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub3c4 \ud6a8\uacfc\uc801\uc73c\ub85c \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\ub9c8\uc9c0\ub9c9\uc73c\ub85c, \uc0c1\ud0dc \ud328\ud134\uc740 \ub2e4\ub978 \ub514\uc790\uc778 \ud328\ud134\uacfc \ube44\uad50\ud588\uc744 \ub54c \uac1d\uccb4\uc758 \uc0c1\ud0dc \ubcc0\ud654\uc5d0 \uc911\uc810\uc744 \ub450\uba70, \ud074\ub798\uc2a4 \uc218\uac00 \uc99d\uac00\ud558\ub294 \ub2e8\uc810\uc774 \uc788\uc9c0\ub9cc \uc801\uc808\ud788 \ud65c\uc6a9\ud558\uba74 \ub9ce\uc740 \uc774\uc810\uc744 \uc81c\uacf5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\ubcf5\uc7a1\ud55c \uc2dc\uc2a4\ud15c\uc5d0\uc11c \ud6a8\uacfc\uc801\uc778 \uc0c1\ud0dc \uc804\ud658 \uad00\ub9ac\ub97c \uc704\ud574\uc11c\ub294 \uc0c1\ud669\uc5d0 \ub9de\uac8c \uc801\uc808\ud55c \ub514\uc790\uc778 \ud328\ud134\uc744 \uc120\ud0dd\ud558\uace0 \uc801\uc6a9\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc758 \ud6a8\uc728\uc131\uc744 \ub192\uc774\uace0, \uc720\uc9c0\ubcf4\uc218\uc131\uc744 \ud5a5\uc0c1\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"
\ubaa9\ucc28 \ubcf5\uc7a1\ud55c \uc0c1\ud0dc \uc804\ud658 \uad00\ub9ac\ub97c \uc704\ud55c \uc0c1\ud0dc \ud328\ud134\uc758 \uc2e4\uc6a9\uc801 \uc811\uadfc 1. \uc0c1\ud0dc \ud328\ud134\uc758 \uac1c\ub150 2. […]<\/p>\n","protected":false},"author":1,"featured_media":33704,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1957],"tags":[2068,2523,471],"class_list":["post-50800","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-handle","tag-pattern","tag-state"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/50800","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=50800"}],"version-history":[{"count":0,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/50800\/revisions"}],"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=50800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=50800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=50800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}