# Context API란?

원도훈·2024년 10월 28일
1
post-thumbnail

React에서 애플리케이션 규모가 커짐에 따라 다양한 컴포넌트들이 서로 데이터를 공유해야 하는 경우가 빈번하게 발생합니다. 이때 모든 컴포넌트에서 데이터를 쉽게 접근하고 관리할 수 있도록 해주는 기능이 바로 Context API입니다. 이 글에서는 Context API의 개념과 사용 방법, 그리고 언제 사용하면 좋은지에 대해 알아보겠습니다.

Context API란?

Context API는 리액트에서 전역 상태를 관리하기 위한 내장 기능입니다. 여러 컴포넌트에서 공통으로 사용하는 데이터를 props drilling 없이 손쉽게 전달할 수 있도록 도와줍니다. 보통 리액트에서는 상위 컴포넌트에서 하위 컴포넌트로 데이터를 전달하기 위해 props를 사용하지만, 이 과정이 복잡해질 경우 코드의 유지보수가 어려워집니다. Context API를 사용하면 이러한 문제를 해결할 수 있습니다. 즉, 컴포넌트 트리 어디서든 데이터를 직접 접근할 수 있도록 하여, 복잡한 데이터 흐름을 간소화해줍니다.

언제 Context API를 사용하나요?

Context APIprops drilling이 복잡하거나 비효율적일 때 유용합니다. 주로 다음과 같은 경우에 사용합니다

  • 테마 설정: 라이트/다크 모드와 같은 UI 테마 상태를 여러 컴포넌트에서 사용해야 할 때.
  • 인증 상태: 로그인 여부나 사용자 정보를 다루는 경우.
  • 다국어 지원: 애플리케이션 전반에 걸쳐 언어 설정을 유지해야 할 때.

간단히 말해, 여러 컴포넌트가 동일한 데이터를 필요로 하고, 그 데이터를 최상위 컴포넌트에서부터 중첩된 컴포넌트들로 전달하는 것이 번거롭거나 코드의 복잡도를 증가시킬 때 Context API를 사용하면 유리합니다.

Context API 사용 방법

Context API를 사용하여 전역 상태를 관리하기 위해서는 세 가지 주요 단계가 필요합니다 createContext, Provider, 그리고 useContext입니다. 아래에서 각 단계를 살펴보고 간단한 예시 코드를 통해 이해해보겠습니다.

1. createContext로 전역 상태 만들기

먼저, createContext를 사용하여 전역 상태를 관리할 Context 객체를 생성합니다. 이 Context 객체는 React가 제공하는 특별한 객체로, 데이터가 담기며 여러 컴포넌트에서 접근할 수 있게 합니다.

import React, { createContext } from 'react';

// Context 생성
export const ThemeContext = createContext();

위 코드에서 ThemeContext라는 Context를 생성했습니다. 이 객체는 이후에 Provider와 Consumer로 사용될 수 있습니다.

2. Provider로 전역 상태 연결하기

Provider는 Context에서 제공하는 컴포넌트로, 자식 컴포넌트들에게 데이터를 공급합니다. Provider는 Context를 사용하여 모든 하위 컴포넌트들이 접근할 수 있는 전역 상태를 설정합니다.

import React, { useState } from 'react';
import { ThemeContext } from './ThemeContext';

const ThemeProvider = ({ children }) => {
  const [theme, setTheme] = useState('light');

  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      {children}
    </ThemeContext.Provider>
  );
};

export default ThemeProvider;

ThemeProvider 컴포넌트는 theme이라는 상태를 관리하고, 그 상태와 상태를 변경할 수 있는 setTheme 함수도 함께 제공합니다. 이 Provider로 감싼 모든 컴포넌트들은 themesetTheme에 접근할 수 있게 됩니다.

3. useContext로 전역 상태 가져오기

useContext 훅을 사용하면 Context에 저장된 값을 쉽게 가져올 수 있습니다. 이를 통해 원하는 곳에서 전역 상태를 사용할 수 있게 됩니다.

import React, { useContext } from 'react';
import { ThemeContext } from './ThemeContext';

const ThemedButton = () => {
  const { theme, setTheme } = useContext(ThemeContext);

  return (
    <button
      style={{
        backgroundColor: theme === 'light' ? '#fff' : '#333',
        color: theme === 'light' ? '#000' : '#fff'
      }}
      onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}
    >
      Toggle Theme
    </button>
  );
};

export default ThemedButton;

위 코드에서 useContext 훅을 사용하여 ThemeContext에 저장된 themesetTheme을 가져왔습니다. 버튼을 클릭할 때마다 테마를 변경할 수 있습니다.

Context API 사용 시 주의점

  • Context는 전역 상태 관리에 용이하지만, 모든 상태를 Context로 관리하는 것은 좋지 않습니다. Context는 변경될 때마다 해당 값을 사용하는 모든 컴포넌트를 다시 렌더링하기 때문에, 상태 변화가 빈번한 경우 성능 문제가 발생할 수 있습니다.
  • React 애플리케이션의 구조가 커질수록 Context 사용이 복잡해질 수 있으므로, 상태의 범위와 복잡성을 고려하여 Context를 사용할지, 혹은 다른 상태 관리 라이브러리(Redux 등)를 사용할지 결정하는 것이 좋습니다.

React의 Context API는 여러 컴포넌트에서 공통 데이터를 쉽게 전달할 수 있도록 도와주는 강력한 도구입니다. 이를 통해 props drilling의 복잡함을 줄이고, 필요한 컴포넌트에서 손쉽게 데이터를 공유할 수 있습니다. 다만, 모든 상태를 Context로 관리하기보다는 필요한 부분에만 사용하여 성능 문제를 피하는 것이 중요합니다.

Context API를 잘 활용하면, 컴포넌트 구조의 복잡성을 줄이고 더 가독성 좋은 코드를 작성할 수 있습니다. 다음에 프로젝트에서 전역 상태 관리가 필요하다면 Context API를 고려해 보세요!

profile
개발

0개의 댓글