전역 상태 관리는 애플리케이션 전체에서 공유되는 상태(state)를 관리하는 방법을 말합니다. 이는 주로 대규모 애플리케이션에서 사용되며, 여러 컴포넌트나 모듈 간에 데이터를 일관성 있게 유지하기 위해 필요합니다. 전역 상태를 효율적으로 관리하면 데이터 흐름을 명확하게 하고, 상태 변화를 추적하기 쉬워집니다.
let globalState = { user: null, theme: 'light' };
function setUser(user) {
globalState.user = user;
}
function setTheme(theme) {
globalState.theme = theme;
}
function getState() {
return globalState;
}
1.2 이벤트 기반 시스템
const state = {};
const listeners = [];
function subscribe(listener) {
listeners.push(listener);
}
function notify() {
listeners.forEach(listener => listener(state));
}
function setState(newState) {
Object.assign(state, newState);
notify();
}
const incrementAction = { type: 'INCREMENT' };
function counterReducer(state = { count: 0 }, action) {
switch (action.type) {
case 'INCREMENT':
return { count: state.count + 1 };
default:
return state;
}
}
import { createStore } from 'redux';
const store = createStore(counterReducer);
store.subscribe(() => console.log(store.getState()));
store.dispatch(incrementAction); // { count: 1 }
2.2 Context API
import React, { createContext, useContext, useState } from 'react';
const GlobalStateContext = createContext();
export const GlobalStateProvider = ({ children }) => {
const [state, setState] = useState({ user: null, theme: 'light' });
return (
<GlobalStateContext.Provider value={[state, setState]}>
{children}
</GlobalStateContext.Provider>
);
};
export const useGlobalState = () => useContext(GlobalStateContext);
import React from 'react';
import { useGlobalState } from './GlobalStateProvider';
const UserProfile = () => {
const [state, setState] = useGlobalState();
return (
<div>
<p>User: {state.user}</p>
<button onClick={() => setState({ ...state, user: 'John' })}>Set User</button>
</div>
);
};
장점
단점
전역 상태 관리는 복잡한 애플리케이션에서 필수적인 패턴입니다. 상황에 맞는 적절한 도구와 방법을 선택하는 것이 중요합니다. 작은 프로젝트에서는 Context API나 기본적인 상태 관리를, 대규모 애플리케이션에서는 Redux 같은 라이브러리를 사용하는 것이 좋습니다. 전역 상태 관리의 장단점을 이해하고, 프로젝트 요구사항에 맞게 적용하는 것이 성공적인 애플리케이션 개발의 열쇠입니다.