로고로고

싱글톤 패턴 (feat.Zustand)

2025년 9월 23일

싱글톤 패턴

싱글톤 패턴은 애플리케이션 전체에서 하나의 인스턴스만 생성해서 공유하는 디자인 패턴

즉, 하나의 상태 저장소(store)를 만들고 그걸 모든 컴포넌트가 공유해서 쓰는 구조

Zustand는 이 개념을 자연스럽게 지원한다. Zustand로 만든 store는 프로젝트 내에서 단 한 번만 생성되고, 그 store를 가져와 사용하는 모든 컴포넌트는 동일한 전역 상태를 바라보게 됨.

 

 

예시 (로그인 상태 관리)

import { create } from "zustand";

interface AuthState {
  user: { id: string; name: string } | null;
  login: (user: { id: string; name: string }) => void;
  logout: () => void;
}

export const useAuthStore = create<AuthState>((set) => ({
  user: null,
  login: (user) => set({ user }),
  logout: () => set({ user: null }),
}));
  • 여기에서 useAuthStore는 딱 한번만 생성
  • 이제 앱 어디서든 동일한 상태를 가져다가 사용 가능

 

 

핵심

  • Zustand의 store는 앱 전체에서 한 번만 생성되는 전역 상태 저장소
  • 여러 컴포넌트가 store를 참조해도 동일한 인스턴스(싱글톤)를 공유
  • 덕분에 상태 일관성을 유지할 수 있고, store를 여러 번 만들 필요 없음