μμΈ‘ κ°λ₯νκ³ μ μ§λ³΄μ μ©μ΄ν μ»΄ν¬λνΈ μνλ₯Ό μν΄ Reactμμ μλ μν λ¨Έμ μμ±μ νμν΄ λ³΄μΈμ. ν¨μ¨μ μΈ κ°λ°μ μν κΈ°μ , λΌμ΄λΈλ¬λ¦¬, λͺ¨λ² μ¬λ‘λ₯Ό λ°°μ보μΈμ.
React μλ μν λ¨Έμ μμ±: μ»΄ν¬λνΈ μν νλ¦ κ°μν
νλ νλ‘ νΈμλ κ°λ°μμ μ»΄ν¬λνΈ μνλ₯Ό ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νλ κ²μ κ²¬κ³ νκ³ μ μ§λ³΄μ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆνλ λ° λ§€μ° μ€μν©λλ€. 볡μ‘ν UI μνΈμμ©μ μ’ μ’ λ³΅μ‘ν μν λ‘μ§μΌλ‘ μ΄μ΄μ Έ, μ΄λ₯Ό μΆλ‘ νκ³ λλ²κΉ νκΈ° μ΄λ ΅κ² λ§λλλ€. μν λ¨Έμ μ μνλ₯Ό λͺ¨λΈλ§νκ³ κ΄λ¦¬νκΈ° μν κ°λ ₯ν ν¨λ¬λ€μμ μ 곡νμ¬ μμΈ‘ κ°λ₯νκ³ μ λ’°ν μ μλ λμμ 보μ₯ν©λλ€. μ΄ κΈμμλ Reactμμ μλ μν λ¨Έμ μμ±μ μ΄μ μ μ΄ν΄λ³΄κ³ , μ»΄ν¬λνΈ μν νλ¦μ μλννκΈ° μν κΈ°μ , λΌμ΄λΈλ¬λ¦¬, λͺ¨λ² μ¬λ‘λ₯Ό μμλ΄ λλ€.
μν λ¨Έμ μ΄λ 무μμΈκ°?
μν λ¨Έμ (λλ μ ν μν λ¨Έμ , FSM)μ μμ€ν μ λμμ μΌλ ¨μ μνμ κ·Έ μνλ€ κ°μ μ νμΌλ‘ μ€λͺ νλ κ³μ°μ μνμ λͺ¨λΈμ λλ€. μ΄λ μ΄λ²€νΈλΌκ³ μλ €μ§ μ λ ₯μ κΈ°λ°νμ¬ μλνλ©°, μ΄ μ΄λ²€νΈλ ν μνμμ λ€λ₯Έ μνλ‘μ μ νμ μ λ°ν©λλ€. κ° μνλ μμ€ν μ νΉμ 쑰건μ΄λ λͺ¨λλ₯Ό λνλ΄λ©°, μ νμ μμ€ν μ΄ μ΄λ¬ν μνλ€ μ¬μ΄λ₯Ό μ΄λ»κ² μ΄λνλμ§ μ μν©λλ€.
μν λ¨Έμ μ μ£Όμ κ°λ μ λ€μκ³Ό κ°μ΅λλ€:
- μν(States): μμ€ν μ κ³ μ ν 쑰건μ΄λ λͺ¨λλ₯Ό λνλ λλ€. μλ₯Ό λ€μ΄, λ²νΌ μ»΄ν¬λνΈλ "Idle(μ ν΄)", "Hovered(λ§μ°μ€ μ€λ²)", "Pressed(λλ¦Ό)"κ³Ό κ°μ μνλ₯Ό κ°μ§ μ μμ΅λλ€.
- μ΄λ²€νΈ(Events): μν κ°μ μ νμ μ λ°νλ μ λ ₯μ λλ€. μμλ‘λ μ¬μ©μ ν΄λ¦, λ€νΈμν¬ μλ΅, νμ΄λ¨Έ λ±μ΄ μμ΅λλ€.
- μ ν(Transitions): μ΄λ²€νΈμ μλ΅νμ¬ ν μνμμ λ€λ₯Έ μνλ‘μ μ΄λμ μ μν©λλ€. κ° μ νμ μμ μν, μ λ° μ΄λ²€νΈ, λμ°© μνλ₯Ό λͺ μν©λλ€.
- μ΄κΈ° μν(Initial State): μμ€ν μ΄ μμνλ μνμ λλ€.
- μ΅μ’ μν(Final State): λ¨Έμ μ μ€νμ μ’ λ£νλ μνμ λλ€ (μ ν μ¬ν).
μν λ¨Έμ μ 볡μ‘ν μν λ‘μ§μ λͺ¨λΈλ§νλ λͺ ννκ³ κ΅¬μ‘°νλ λ°©λ²μ μ 곡νμ¬ μ΄ν΄, ν μ€νΈ, μ μ§λ³΄μλ₯Ό λ μ½κ² λ§λλλ€. μ΄λ κ°λ₯ν μν μ νμ μ μ½μ κ°νμ¬ μμμΉ λͺ»ν λλ μ ν¨νμ§ μμ μνλ₯Ό λ°©μ§ν©λλ€.
Reactμμ μν λ¨Έμ μ¬μ©μ μ΄μ
μν λ¨Έμ μ React μ»΄ν¬λνΈμ ν΅ν©νλ©΄ λ€μκ³Ό κ°μ λͺ κ°μ§ μ€μν μ΄μ μ΄ μμ΅λλ€:
- ν₯μλ μν κ΄λ¦¬: μν λ¨Έμ μ μ»΄ν¬λνΈ μνλ₯Ό κ΄λ¦¬νλ λͺ ννκ³ κ΅¬μ‘°νλ μ κ·Ό λ°©μμ μ 곡νμ¬ λ³΅μ‘μ±μ μ€μ΄κ³ μ ν리μΌμ΄μ λμμ λ μ½κ² μΆλ‘ ν μ μκ² ν©λλ€.
- μμΈ‘ κ°λ₯μ± ν₯μ: λͺ μμ μΈ μνμ μ νμ μ μν¨μΌλ‘μ¨ μν λ¨Έμ μ μμΈ‘ κ°λ₯ν λμμ 보μ₯νκ³ μ ν¨νμ§ μμ μν μ‘°ν©μ λ°©μ§ν©λλ€.
- κ°μνλ ν μ€ν : μν λ¨Έμ μ κ° μνμ μ νμ λ 립μ μΌλ‘ ν μ€νΈν μ μμΌλ―λ‘ ν¬κ΄μ μΈ ν μ€νΈλ₯Ό μμ±νκΈ° λ μ½κ² λ§λλλ€.
- μ μ§λ³΄μμ± μ¦κ°: μν λ¨Έμ μ ꡬ쑰νλ νΉμ±μ μν λ‘μ§μ μ΄ν΄νκ³ μμ νκΈ° μ½κ² λ§λ€μ΄ μ₯κΈ°μ μΈ μ μ§λ³΄μμ±μ ν₯μμν΅λλ€.
- λ λμ νμ : μν λ¨Έμ λ€μ΄μ΄κ·Έλ¨κ³Ό μ½λλ κ°λ°μμ λμμ΄λ κ°μ κ³΅ν΅ μΈμ΄λ₯Ό μ 곡νμ¬ νμ κ³Ό μμ¬μν΅μ μ΄μ§ν©λλ€.
λ‘λ© μΈλμΌμ΄ν° μ»΄ν¬λνΈμ κ°λ¨ν μλ₯Ό μκ°ν΄ λ΄ μλ€. μν λ¨Έμ μ΄ μλ€λ©΄ `isLoading`, `isError`, `isSuccess`μ κ°μ μ¬λ¬ λΆλ¦¬μΈ νλκ·Έλ‘ μνλ₯Ό κ΄λ¦¬ν μ μμ΅λλ€. μ΄λ μ½κ² μΌκ΄μ± μλ μν(μ: `isLoading`κ³Ό `isSuccess`κ° λͺ¨λ trueμΈ κ²½μ°)λ‘ μ΄μ΄μ§ μ μμ΅λλ€. κ·Έλ¬λ μν λ¨Έμ μ μ»΄ν¬λνΈκ° `Idle`, `Loading`, `Success`, `Error` μ€ νλμ μνμλ§ μμ μ μλλ‘ κ°μ νμ¬ μ΄λ¬ν λΆμΌμΉλ₯Ό λ°©μ§ν©λλ€.
μλ μν λ¨Έμ μμ±
μν λ¨Έμ μ μλμΌλ‘ μ μνλ κ²μ΄ μ μ΅ν μ μμ§λ§, 볡μ‘ν μ»΄ν¬λνΈμ κ²½μ° κ·Έ κ³Όμ μ΄ μ§λ£¨νκ³ μ€λ₯κ° λ°μνκΈ° μ½μ΅λλ€. μλ μν λ¨Έμ μμ±μ κ°λ°μκ° μ μΈμ νμμ μ¬μ©νμ¬ μν λ¨Έμ λ‘μ§μ μ μνκ³ , μ΄λ₯Ό μ€ν κ°λ₯ν μ½λλ‘ μλ μ»΄νμΌνλ μ루μ μ μ 곡ν©λλ€. μ΄ μ κ·Ό λ°©μμ μ¬λ¬ κ°μ§ μ΄μ μ μ 곡ν©λλ€:
- 보μΌλ¬νλ μ΄νΈ κ°μ: μλ μμ±μ λ°λ³΅μ μΈ μν κ΄λ¦¬ μ½λλ₯Ό μμ±ν νμλ₯Ό μμ 보μΌλ¬νλ μ΄νΈλ₯Ό μ€μ΄κ³ κ°λ°μ μμ°μ±μ ν₯μμν΅λλ€.
- μΌκ΄μ± ν₯μ: λ¨μΌ μ 보 μμ€(single source of truth)μμ μ½λλ₯Ό μμ±ν¨μΌλ‘μ¨ μλ μμ±μ μΌκ΄μ±μ 보μ₯νκ³ μ€λ₯ μνμ μ€μ λλ€.
- μ μ§λ³΄μμ± ν₯μ: μν λ¨Έμ λ‘μ§μ λ³κ²½μ μ μΈμ νμμμ μ΄λ£¨μ΄μ§λ©° μ½λλ μλμΌλ‘ μ¬μμ±λμ΄ μ μ§λ³΄μκ° κ°μνλ©λλ€.
- μκ°ν λ° λꡬ: λ§μ μν λ¨Έμ μμ± λꡬλ μκ°ν κΈ°λ₯μ μ 곡νμ¬ κ°λ°μκ° μν λ‘μ§μ λ μ½κ² μ΄ν΄νκ³ λλ²κΉ ν μ μλλ‘ ν©λλ€.
React μλ μν λ¨Έμ μμ±μ μν λꡬ λ° λΌμ΄λΈλ¬λ¦¬
Reactμμ μλ μν λ¨Έμ μμ±μ μ©μ΄νκ² νλ μ¬λ¬ λꡬμ λΌμ΄λΈλ¬λ¦¬κ° μμ΅λλ€. κ°μ₯ μΈκΈ° μλ λͺ κ°μ§ μ΅μ μ λ€μκ³Ό κ°μ΅λλ€:
XState
XStateλ μν λ¨Έμ κ³Ό μνμ°¨νΈλ₯Ό μμ±, ν΄μ, μ€ννκΈ° μν κ°λ ₯ν JavaScript λΌμ΄λΈλ¬λ¦¬μ λλ€. μν λ¨Έμ λ‘μ§μ μ μνκΈ° μν μ μΈμ ꡬ문μ μ 곡νλ©° κ³μΈ΅μ λ° λ³λ ¬ μν, κ°λ, μ‘μ μ μ§μν©λλ€.
μμ: XStateλ‘ κ°λ¨ν ν κΈ μν λ¨Έμ μ μνκΈ°
import { createMachine } from 'xstate';
const toggleMachine = createMachine({
id: 'toggle',
initial: 'inactive',
states: {
inactive: {
on: {
TOGGLE: { target: 'active' },
},
},
active: {
on: {
TOGGLE: { target: 'inactive' },
},
},
},
});
export default toggleMachine;
μ΄ μ½λλ `inactive`μ `active`λΌλ λ κ°μ μνμ κ·Έ μ¬μ΄λ₯Ό μ ννλ `TOGGLE` μ΄λ²€νΈλ₯Ό κ°μ§ μν λ¨Έμ μ μ μν©λλ€. μ΄ μν λ¨Έμ μ React μ»΄ν¬λνΈμμ μ¬μ©νλ €λ©΄ XStateμμ μ 곡νλ `useMachine` ν μ μ¬μ©ν μ μμ΅λλ€.
import { useMachine } from '@xstate/react';
import toggleMachine from './toggleMachine';
function ToggleComponent() {
const [state, send] = useMachine(toggleMachine);
return (
);
}
export default ToggleComponent;
μ΄ μμλ XStateλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈ μνλ₯Ό μ μΈμ μ΄κ³ μμΈ‘ κ°λ₯ν λ°©μμΌλ‘ μ μνκ³ κ΄λ¦¬νλ λ°©λ²μ 보μ¬μ€λλ€.
Robot
Robotμ λ¨μμ±κ³Ό μ¬μ© νΈμμ±μ μ€μ μ λ λ λ€λ₯Έ νλ₯ν μν λ¨Έμ λΌμ΄λΈλ¬λ¦¬μ λλ€. μν λ¨Έμ μ μ μνκ³ μ΄λ₯Ό React μ»΄ν¬λνΈμ ν΅ν©νκΈ° μν κ°λ¨ν APIλ₯Ό μ 곡ν©λλ€.
μμ: RobotμΌλ‘ μΉ΄μ΄ν° μν λ¨Έμ μ μνκΈ°
import { createMachine, assign } from 'robot';
const counterMachine = createMachine({
id: 'counter',
initial: 'idle',
context: { count: 0 },
states: {
idle: {
on: {
INCREMENT: { actions: assign({ count: (context) => context.count + 1 }) },
DECREMENT: { actions: assign({ count: (context) => context.count - 1 }) },
},
},
},
});
export default counterMachine;
μ΄ μ½λλ `idle` μνμ `count` 컨ν μ€νΈ λ³μλ₯Ό μ λ°μ΄νΈνλ `INCREMENT`, `DECREMENT` λ μ΄λ²€νΈλ₯Ό κ°μ§ μν λ¨Έμ μ μ μν©λλ€. `assign` μ‘μ μ 컨ν μ€νΈλ₯Ό μμ νλ λ° μ¬μ©λ©λλ€.
React ν κ³Ό 컀μ€ν μ루μ
XStateλ Robotκ³Ό κ°μ λΌμ΄λΈλ¬λ¦¬λ ν¬κ΄μ μΈ μν λ¨Έμ ꡬνμ μ 곡νμ§λ§, React ν μ μ¬μ©νμ¬ μ»€μ€ν μν λ¨Έμ μ루μ μ λ§λλ κ²λ κ°λ₯ν©λλ€. μ΄ μ κ·Ό λ°©μμ ꡬν μΈλΆ μ¬νμ λν λ ν° μ μ°μ±κ³Ό μ μ΄λ₯Ό νμ©ν©λλ€.
μμ: `useReducer`λ‘ κ°λ¨ν μν λ¨Έμ ꡬννκΈ°
import { useReducer } from 'react';
const initialState = { value: 'inactive' };
const reducer = (state, event) => {
switch (event.type) {
case 'TOGGLE':
return { value: state.value === 'inactive' ? 'active' : 'inactive' };
default:
return state;
}
};
function useToggle() {
const [state, dispatch] = useReducer(reducer, initialState);
return [state, dispatch];
}
function ToggleComponent() {
const [state, dispatch] = useToggle();
return (
);
}
export default ToggleComponent;
μ΄ μμλ `useReducer` ν μ μ¬μ©νμ¬ λ¦¬λμ ν¨μμ κΈ°λ°ν μν μ νμ κ΄λ¦¬ν©λλ€. μ΄ μ κ·Ό λ°©μμ μ μ© μν λ¨Έμ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ κ²λ³΄λ€ κ°λ¨νμ§λ§, λ ν¬κ³ 볡μ‘ν μν λ¨Έμ μ κ²½μ° λ 볡μ‘ν΄μ§ μ μμ΅λλ€.
Reactμμ μν λ¨Έμ ꡬνμ μν λͺ¨λ² μ¬λ‘
Reactμμ μν λ¨Έμ μ ν¨κ³Όμ μΌλ‘ ꡬννλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
- μνμ μ νμ λͺ ννκ² μ μνκΈ°: μν λ¨Έμ μ ꡬννκΈ° μ μ κ°λ₯ν μνμ κ·Έ μ¬μ΄μ μ νμ μ μ€νκ² μ μνμμμ€. λ€μ΄μ΄κ·Έλ¨μ΄λ λ€λ₯Έ μκ°μ 보쑰 μλ£λ₯Ό μ¬μ©νμ¬ μν νλ¦μ κ³ννμμμ€.
- μνλ₯Ό μμμ μΌλ‘ μ μ§νκΈ°: κ° μνλ κ³ μ νκ³ μ μ μλ 쑰건μ λνλ΄μΌ ν©λλ€. μ¬λ¬ κ΄λ ¨ μλ μ 보λ₯Ό κ²°ν©νλ 볡μ‘ν μνλ₯Ό λ§λ€μ§ λ§μμμ€.
- κ°λλ₯Ό μ¬μ©νμ¬ μ ν μ μ΄νκΈ°: κ°λλ μ νμ΄ λ°μνκΈ° μν΄ μΆ©μ‘±λμ΄μΌ νλ 쑰건μ λλ€. κ°λλ₯Ό μ¬μ©νμ¬ μ ν¨νμ§ μμ μν μ νμ λ°©μ§νκ³ μν λ¨Έμ μ΄ μμλλ‘ λμνλλ‘ λ³΄μ₯νμμμ€. μλ₯Ό λ€μ΄, κ°λλ ꡬ맀λ₯Ό μ§ννκΈ° μ μ μ¬μ©μμκ² μΆ©λΆν μκΈμ΄ μλμ§ νμΈν μ μμ΅λλ€.
- μ‘μ μ μ νκ³Ό λΆλ¦¬νκΈ°: μ‘μ μ μ ν μ€μ λ°μνλ λΆμμ©μ λλ€. μ½λμ λͺ νμ±κ³Ό ν μ€νΈ μ©μ΄μ±μ ν₯μμν€κΈ° μν΄ μ‘μ μ μ ν λ‘μ§κ³Ό λΆλ¦¬νμμμ€. μλ₯Ό λ€μ΄, μ‘μ μ μ¬μ©μμκ² μλ¦Όμ 보λ΄λ κ²μΌ μ μμ΅λλ€.
- μν λ¨Έμ μ μ² μ ν ν μ€νΈνκΈ°: κ° μνμ μ νμ λν΄ ν¬κ΄μ μΈ ν μ€νΈλ₯Ό μμ±νμ¬ λͺ¨λ μν©μμ μν λ¨Έμ μ΄ μ¬λ°λ₯΄κ² λμνλμ§ νμΈνμμμ€.
- μν λ¨Έμ μκ°ννκΈ°: μκ°ν λꡬλ₯Ό μ¬μ©νμ¬ μν λ‘μ§μ μ΄ν΄νκ³ λλ²κΉ νμμμ€. λ§μ μν λ¨Έμ λΌμ΄λΈλ¬λ¦¬λ λ¬Έμ λ₯Ό μλ³νκ³ ν΄κ²°νλ λ° λμμ΄ λλ μκ°ν κΈ°λ₯μ μ 곡ν©λλ€.
μ€μ μμ λ° μ¬μ© μ¬λ‘
μν λ¨Έμ μ κ΄λ²μν React μ»΄ν¬λνΈ λ° μ ν리μΌμ΄μ μ μ μ©λ μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μΌλ°μ μΈ μ¬μ© μ¬λ‘μ λλ€:
- νΌ μ ν¨μ± κ²μ¬: μν λ¨Έμ μ μ¬μ©νμ¬ "Initial(μ΄κΈ°)", "Validating(κ²μ¦ μ€)", "Valid(μ ν¨)", "Invalid(μ ν¨νμ§ μμ)"μ κ°μ μνλ₯Ό ν¬ν¨ν νΌμ μ ν¨μ± κ²μ¬ μνλ₯Ό κ΄λ¦¬ν©λλ€.
- UI μ»΄ν¬λνΈ: μμ½λμΈ, ν, λͺ¨λ¬κ³Ό κ°μ 볡μ‘ν UI μ»΄ν¬λνΈλ₯Ό μν λ¨Έμ μ μ¬μ©νμ¬ μνμ λμμ κ΄λ¦¬νλ©° ꡬνν©λλ€.
- μΈμ¦ νλ¦: "Unauthenticated(μΈμ¦λμ§ μμ)", "Authenticating(μΈμ¦ μ€)", "Authenticated(μΈμ¦λ¨)", "Error(μ€λ₯)"μ κ°μ μνλ₯Ό κ°μ§ μν λ¨Έμ μ μ¬μ©νμ¬ μΈμ¦ νλ‘μΈμ€λ₯Ό λͺ¨λΈλ§ν©λλ€.
- κ²μ κ°λ°: μν λ¨Έμ μ μ¬μ©νμ¬ νλ μ΄μ΄, μ , κ°μ²΄μ κ°μ κ²μ μν°ν°μ μνλ₯Ό κ΄λ¦¬ν©λλ€.
- μ μμκ±°λ μ ν리μΌμ΄μ : "Pending(λκΈ° μ€)", "Processing(μ²λ¦¬ μ€)", "Shipped(λ°°μ‘λ¨)", "Delivered(λ°°μ‘ μλ£)"μ κ°μ μνλ₯Ό κ°μ§ μν λ¨Έμ μ μ¬μ©νμ¬ μ£Όλ¬Έ μ²λ¦¬ νλ¦μ λͺ¨λΈλ§ν©λλ€. μν λ¨Έμ μ κ²°μ μ€ν¨, μ¬κ³ λΆμ‘±, μ£Όμ νμΈ λ¬Έμ μ κ°μ 볡μ‘ν μλ리μ€λ₯Ό μ²λ¦¬ν μ μμ΅λλ€.
- κΈλ‘λ² μμ: κ΅μ μ νκ³΅κΆ μμ½ μμ€ν μ μμν΄ λ³΄μμμ€. μμ½ νλ‘μΈμ€λ "Selecting Flights(νκ³΅νΈ μ ν)", "Entering Passenger Details(μΉκ° μ 보 μ λ ₯)", "Making Payment(κ²°μ μ§ν)", "Booking Confirmed(μμ½ νμ )", "Booking Failed(μμ½ μ€ν¨)"μ κ°μ μνλ₯Ό κ°μ§ μν λ¨Έμ μΌλ‘ λͺ¨λΈλ§λ μ μμ΅λλ€. κ° μνλ μ μΈκ³μ λ€μν νκ³΅μ¬ API λ° κ²°μ κ²μ΄νΈμ¨μ΄μ μνΈ μμ©νλ νΉμ μ‘μ μ κ°μ§ μ μμ΅λλ€.
κ³ κΈ κ°λ λ° κ³ λ € μ¬ν
Reactμμ μν λ¨Έμ μ λ μ΅μν΄μ§λ©΄ λ€μκ³Ό κ°μ κ³ κΈ κ°λ κ³Ό κ³ λ € μ¬νμ μ§λ©΄ν μ μμ΅λλ€:
- κ³μΈ΅μ μν λ¨Έμ : κ³μΈ΅μ μν λ¨Έμ μ μ¬μ©νλ©΄ μνλ₯Ό λ€λ₯Έ μν λ΄μ μ€μ²©νμ¬ μν λ‘μ§μ κ³μΈ΅ ꡬ쑰λ₯Ό λ§λ€ μ μμ΅λλ€. μ΄λ μ¬λ¬ μΆμν μμ€μ κ°μ§ 볡μ‘ν μμ€ν μ λͺ¨λΈλ§νλ λ° μ μ©ν μ μμ΅λλ€.
- λ³λ ¬ μν λ¨Έμ : λ³λ ¬ μν λ¨Έμ μ μ¬μ©νλ©΄ μ¬λ¬ μνκ° λμμ νμ±νλ μ μλ λμ μν λ‘μ§μ λͺ¨λΈλ§ν μ μμ΅λλ€. μ΄λ μ¬λ¬ λ 립μ μΈ νλ‘μΈμ€λ₯Ό κ°μ§ μμ€ν μ λͺ¨λΈλ§νλ λ° μ μ©ν μ μμ΅λλ€.
- μνμ°¨νΈ(Statecharts): μνμ°¨νΈλ 볡μ‘ν μν λ¨Έμ μ λͺ μνκΈ° μν μκ°μ νμμ λλ€. μνμ μ νμ κ·Έλν½ ννμ μ 곡νμ¬ μν λ‘μ§μ λ μ½κ² μ΄ν΄νκ³ μ λ¬ν μ μκ² ν©λλ€. XStateμ κ°μ λΌμ΄λΈλ¬λ¦¬λ μνμ°¨νΈ μ¬μμ μμ ν μ§μν©λλ€.
- λ€λ₯Έ λΌμ΄λΈλ¬λ¦¬μμ ν΅ν©: μν λ¨Έμ μ Reduxλ Zustandμ κ°μ λ€λ₯Έ React λΌμ΄λΈλ¬λ¦¬μ ν΅ν©νμ¬ μ μ μ ν리μΌμ΄μ μνλ₯Ό κ΄λ¦¬ν μ μμ΅λλ€. μ΄λ μ¬λ¬ μ»΄ν¬λνΈκ° κ΄λ ¨λ 볡μ‘ν μ ν리μΌμ΄μ νλ¦μ λͺ¨λΈλ§νλ λ° μ μ©ν μ μμ΅λλ€.
- μκ°μ λꡬμμ μ½λ μμ±: μΌλΆ λꡬλ μν λ¨Έμ μ μκ°μ μΌλ‘ λμμΈν λ€μ ν΄λΉ μ½λλ₯Ό μλμΌλ‘ μμ±ν μ μκ² ν΄μ€λλ€. μ΄λ 볡μ‘ν μν λ¨Έμ μ λ§λλ λ λΉ λ₯΄κ³ μ§κ΄μ μΈ λ°©λ²μ΄ λ μ μμ΅λλ€.
κ²°λ‘
μλ μν λ¨Έμ μμ±μ React μ ν리μΌμ΄μ μμ μ»΄ν¬λνΈ μν νλ¦μ κ°μννλ κ°λ ₯ν μ κ·Ό λ°©μμ μ 곡ν©λλ€. μ μΈμ ꡬ문과 μλνλ μ½λ μμ±μ μ¬μ©νμ¬ κ°λ°μλ 보μΌλ¬νλ μ΄νΈλ₯Ό μ€μ΄κ³ , μΌκ΄μ±μ ν₯μμν€λ©°, μ μ§λ³΄μμ±μ λμΌ μ μμ΅λλ€. XStateλ Robotκ³Ό κ°μ λΌμ΄λΈλ¬λ¦¬λ Reactμμ μν λ¨Έμ μ ꡬννκΈ° μν νλ₯ν λꡬλ₯Ό μ 곡νλ©°, React ν μ μ¬μ©ν 컀μ€ν μ루μ μ λ ν° μ μ°μ±μ μ 곡ν©λλ€. λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ κ³ κΈ κ°λ μ νμν¨μΌλ‘μ¨ μν λ¨Έμ μ νμ©νμ¬ λ κ²¬κ³ νκ³ μμΈ‘ κ°λ₯νλ©° μ μ§λ³΄μ κ°λ₯ν React μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€. μΉ μ ν리μΌμ΄μ μ 볡μ‘μ±μ΄ κ³μ μ¦κ°ν¨μ λ°λΌ μν λ¨Έμ μ μνλ₯Ό κ΄λ¦¬νκ³ μνν μ¬μ©μ κ²½νμ 보μ₯νλ λ° μ μ λ μ€μν μν μ ν κ²μ λλ€.
μν λ¨Έμ μ νμ λ°μλ€μ΄κ³ React μ»΄ν¬λνΈμ λν μλ‘μ΄ μμ€μ μ μ΄λ₯Ό μ κΈ ν΄μ νμμμ€. μ΄ κΈμμ λ Όμλ λꡬμ κΈ°μ μ μ€ννκΈ° μμνκ³ μλ μν λ¨Έμ μμ±μ΄ κ°λ° μν¬νλ‘λ₯Ό μ΄λ»κ² λ³νμν¬ μ μλμ§ λ°κ²¬νμμμ€.