ReactJS 디자인 패턴 ~State Machine Pattern~

발행: (2026년 1월 6일 오전 09:01 GMT+9)
2 분 소요
원문: Dev.to

Source: Dev.to

개요

State Machine Pattern은 React 코드베이스를 읽기 쉽고, 유지보수가 용이하며, 생산성을 높이는 데 도움이 됩니다. 여러 개의 불리언 상태 변수를 관리하는 대신, 단일 status 변수 하나로 컴포넌트의 상태를 표현할 수 있어 상태 관리가 단순해지고 불가능한 조합(예: 로딩 중이면서 동시에 오류 상태인 경우)을 방지할 수 있습니다.

Before

function App() {
  const [error, setError] = useState(true);
  const [loading, setLoading] = useState(false);
  const [ready, setReady] = useState(false);

  const handleNextState = () => {
    if (status === "ready") {
      setLoading(true);
      setReady(false);
      setError(false);
    } else if (status === "loading") {
      setError(true);
      setReady(false);
      setLoading(false);
    } else if (status === "error") {
      setReady(true);
      setError(false);
      setLoading(false);
    }
  };

  return (
    
      
## State Machine Pattern

      Next State

      {loading && 
Loading...
}
      {error && 
Something went wrong!
}
      {ready && 
Ready to go!
}
    
  );
}

상태 머신 패턴

      Next State

      {loading && 
Loading...
}
      {error && 
Something went wrong!
}
      {ready && 
Ready to go!
}

적용 후

function App() {
  const [status, setStatus] = useState('ready');

  const handleNextState = () => {
    if (status === "ready") {
      setStatus("loading");
    } else if (status === "loading") {
      setStatus("error");
    } else if (status === "error") {
      setStatus("ready");
    }
  };

  return (
    
      
## State Machine Pattern

      Next State

      {status === "loading" && 
Loading...
}
      {status === "error" && 
Something went wrong!
}
      {status === "ready" && 
Ready to go!
}
    
  );
}
Back to Blog

관련 글

더 보기 »

🚨 React 재렌더링 방법: 레퍼런스가 중요!

변형 메서드는 참조를 변경하지 않습니다. 이러한 메서드들은 메모리 내 동일한 배열/객체를 수정하므로 React 상태에 직접 사용하면 재렌더링이 트리거되지 않을 수 있습니다.