Provider
패턴은 prop drilling
없이 컴포넌트가 직접 필요한 데이터에 접근할 수 있도록 한다.prop drilling
문제가 발생한다.Provider
패턴은 특정 컴포넌트 계층 안에서 데이터를 공급하여, 필요한 자식 컴포넌트가 직접 데이터를 읽을 수 있도록 해준다.Provider
: 외부 의존성이나 데이터를 하위로 공급한다.
Consumer
: Provider를 통해 주입받은 데이터를 사용한다.
Context
: 실제 데이터나 기능을 담고 있는 컨테이너
Provider
는 특정 값을 context
로 감싸 트리 하위 컴포넌트들이 해당 값에 접근할 수 있도록 한다.Context
를 구독하여 필요한 데이터를 가져온다.Context
를 직접 사용하지 않으며, prop drilling
없이도 데이터가 전달된다.// ThemeContext.tsx
import { createContext, useContext } from "react";
const ThemeContext = createContext<"light" | "dark">("light");
export const ThemeProvider = ({ children }: { children: React.ReactNode }) => {
return <ThemeContext.Provider value="dark">{children}</ThemeContext.Provider>;
};
export const useTheme = () => useContext(ThemeContext);
// App.tsx
import { ThemeProvider } from "./ThemeContext";
import Page from "./Page";
function App() {
return (
<ThemeProvider>
<Page />
</ThemeProvider>
);
}
// Page.tsx
import { useTheme } from "./ThemeContext";
function Page() {
const theme = useTheme();
return <div className={`theme-${theme}`}>현재 테마: {theme}</div>;
}
Provider
패턴은 일반적으로 객체나 리소스를 외부에서 주입해 사용하도록 돕는 구조로, 프론트엔드 프레임워크에서는 컴포넌트 간 데이터 전달 문제를 해결하는 방식으로 사용된다.React
에서는 중첩된 props
전달(prop drilling
)을 줄이기 위한 수단으로 Provider
패턴(Context API
)이 활용된다.React
와 같은 프레임워크에서 Provider
패턴을 사용할 경우, Provider
하위의 모든 컴포넌트가 컨텍스트 값의 변경에 따라 리렌더링되는 단점이 존재한다.