0Pricing
React Academy · 강의

고차 컴포넌트(HOC) 이해하기

컴포넌트를 감싸 속성을 주입하고, 경로를 보호하거나, HOC 팩토리를 통해 로깅을 추가합니다.

고차 컴포넌트(HOC) 이해하기은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

이 강의에서는 고차 컴포넌트(HOC)가 무엇인지, HOC를 작성하는 방법과 일반적인 사용 사례, 그리고 훅과 비교했을 때의 장단점을 알아봅니다.

HOC란 무엇인가요?

고차 컴포넌트는 컴포넌트를 입력으로 받아 새롭게 향상된 컴포넌트를 반환하는 함수입니다. HOC는 원래 컴포넌트를 수정하지 않고 속성, 인증 검사 또는 로그 기록과 같은 동작을 추가합니다.
// HOC signature
function withEnhancement(WrappedComponent) {
  return function Enhanced(props) {
    // add behaviour here
    return <WrappedComponent {...props} extraProp="value" />;
  };
}

인증 보호 HOC

일반적인 HOC는 인증되지 않은 사용자를 로그인 페이지로 리디렉션합니다. 원래 컴포넌트는 인증 로직을 전혀 알 필요가 없습니다.
function withAuth(Component) {
  return function AuthGuard(props) {
    const isLoggedIn = useAuth();
    if (!isLoggedIn) return <Navigate to="/login" />;
    return <Component {...props} />;
  };
}

const ProtectedPage = withAuth(DashboardPage);

로그 기록 HOC

HOC는 디버깅을 위해 컴포넌트 이름과 속성을 사용해 모든 렌더링을 기록할 수 있습니다. 어떤 컴포넌트든 withLogger로 래핑하면 추적 기능을 추가할 수 있습니다.
function withLogger(Component) {
  return function Logged(props) {
    console.log('[render]', Component.displayName, props);
    return <Component {...props} />;
  };
}

속성 전달하기

받은 모든 속성을 항상 `{...props}`로 래핑된 컴포넌트에 펼쳐 전달하세요. 이렇게 하지 않으면 원래 컴포넌트의 API가 손상됩니다.
return function HOC(props) {
  return <WrappedComponent {...props} injectedProp={value} />;
};

displayName 설정하기

HOC가 반환한 컴포넌트는 React DevTools에서 이름을 잃습니다. 의미 있는 displayName을 설정하면 컴포넌트 트리에서 해당 컴포넌트를 식별할 수 있습니다.
function withAuth(Component) {
  function AuthGuard(props) { /* ... */ }
  AuthGuard.displayName = 'withAuth(' + (Component.displayName || Component.name) + ')';
  return AuthGuard;
}

ref 전달하기

HOC는 기본적으로 ref를 차단합니다. HOC 내부에서 `React.forwardRef`를 사용해 ref를 래핑된 컴포넌트로 전달하세요.
function withStyle(Component) {
  return React.forwardRef(function (props, ref) {
    return <Component ref={ref} {...props} className="styled" />;
  });
}

HOC와 렌더 속성 및 훅 비교

HOC는 속성을 주입하고 라우트를 보호할 수 있습니다. 렌더 속성은 동적인 UI를 전달합니다. 사용자 지정 훅은 로직을 추출합니다. 최신 React에서는 래퍼 지옥을 피하고 조합하기도 더 쉽기 때문에 훅을 선호합니다. HOC는 클래스 컴포넌트나 서드파티 통합에 유용합니다.

래퍼 지옥

많은 HOC를 적용하면 컴포넌트 트리에 깊은 중첩이 만들어집니다: `withTheme(withAuth(withLogger(MyPage)))`. DevTools에는 이름 없는 래퍼 계층이 여러 개 표시됩니다. 훅을 사용하면 이 문제를 완전히 피할 수 있습니다.

실제 라이브러리에서의 HOC

Redux의 `connect()`, React Router v5의 `withRouter()`, MobX의 `observer()`는 모두 HOC입니다. HOC를 이해하면 이러한 오래된 라이브러리 API를 다루는 데 도움이 됩니다.

빠른 확인

고차 컴포넌트는 자신이 받은 속성을 항상 어떻게 처리해야 하나요?

복습

HOC는 컴포넌트를 받아 향상된 컴포넌트를 반환하는 함수입니다. HOC는 속성을 주입하고, 라우트를 보호하며, 로그 기록을 추가합니다. 항상 속성을 펼쳐 전달하고, displayName을 설정하며, ref를 전달하세요. 최신 React에서는 훅을 우선 사용하세요.

다음 내용

다음 강의: **HOC와 렌더 속성 및 사용자 지정 훅 비교** — 가독성, 테스트, 조합 측면에서 세 가지 코드 공유 전략을 비교합니다.

자주 묻는 질문

“고차 컴포넌트(HOC) 이해하기” 강의는 무료인가요?

네 — “고차 컴포넌트(HOC) 이해하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“고차 컴포넌트(HOC) 이해하기”에서 뭘 배우나요?

컴포넌트를 감싸 속성을 주입하고, 경로를 보호하거나, HOC 팩토리를 통해 로깅을 추가합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“고차 컴포넌트(HOC) 이해하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 렌더 속성 패턴
  2. 고차 컴포넌트(HOC) 이해하기
  3. HOC, 렌더 속성, 사용자 정의 훅 비교
  4. HOC를 사용자 정의 훅으로 리팩터링하기
← React Academy(으)로 돌아가기