
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 하위의 모든 컴포넌트가 컨텍스트 값의 변경에 따라 리렌더링되는 단점이 존재한다.