본문 바로가기
IT/React Basic

[React] 초급 개념10 - 컴포넌트 재사용성과 모듈화

by Echinacea 2025. 2. 26.
반응형

리액트에서 컴포넌트의 재사용성과 모듈화는 코드 유지보수를 쉽게 하고, 개발 속도를 높이며, 협업을 원활하게 하는 핵심 원칙입니다. 컴포넌트를 효과적으로 재사용하면 일관된 UI를 유지하면서 개발 효율성을 극대화할 수 있습니다.

 

왜 컴포넌트를 재사용해야 할까?

  • 반복적인 코드 작성을 줄여 생산성을 높이고 유지보수를 쉽게 함.
  • 일관된 디자인과 기능을 유지할 수 있음.
  • 하나의 컴포넌트 변경만으로 전체 애플리케이션에 반영 가능.

 

모듈화의 장점은 무엇일까?

  • 기능별로 컴포넌트를 분리하면 코드의 가독성이 향상됨.
  • 팀원 간 역할을 분리하여 협업이 원활해짐.
  • 필요한 부분만 불러올 수 있어 성능 최적화 가능.

 

 

🔸 1. 컴포넌트 재사용이란?

 

한 번 만든 컴포넌트를 여러 곳에서 활용할 수 있도록 설계하는 것

  • 프레젠테이션 컴포넌트컨테이너 컴포넌트로 분리
  • props를 활용하여 동적인 데이터 적용 가능
  • 범용적인 UI 요소를 만들어 재사용성 극대화

 

 

✅ 예제: 버튼 컴포넌트 재사용하기

function Button({ text, onClick }) {
  return <button onClick={onClick}>{text}</button>;
}

function App() {
  return (
    <div>
      <Button text="확인" onClick={() => alert("확인 클릭됨")} />
      <Button text="취소" onClick={() => alert("취소 클릭됨")} />
    </div>
  );
}

📌 설명:

  • Button 컴포넌트를 재사용하여 다양한 버튼을 손쉽게 생성 가능.
  • text와 onClick을 props로 받아 유연한 동작을 제공.

 

 

🔸 2. 컴포넌트의 모듈화

기능별로 컴포넌트를 분리하여 독립적인 구조 유지

 

✅ 예제: 헤더, 본문, 푸터 분리하기

function Header() {
  return <header><h1>로고</h1></header>;
}

function Main() {
  return <main><p>콘텐츠 영역</p></main>;
}

function Footer() {
  return <footer><p>저작권 &copy; 2025</p></footer>;
}

function App() {
  return (
    <div>
      <Header />
      <Main />
      <Footer />
    </div>
  );
}

 

📌 설명:

  • Header, Main, Footer 컴포넌트를 분리하여 독립적으로 관리 가능.
  • App 컴포넌트에서 조합하여 전체 UI를 구성함.

💡 이 방식의 장점:

  • 코드가 명확해지고 가독성이 좋아짐.
  • 각 컴포넌트가 독립적으로 유지보수 가능.
  • 다른 프로젝트에서도 재사용할 수 있는 구조가 됨.

 

 

🔸 3. 고차 컴포넌트(Higher-Order Component, HOC) 활용

컴포넌트를 감싸서 추가 기능을 부여하는 패턴

 

✅ 예제: 로그인 여부를 체크하는 HOC

function withAuth(Component) {
  return function AuthenticatedComponent(props) {
    const isLoggedIn = true; // 예제에서는 항상 로그인 상태
    return isLoggedIn ? <Component {...props} /> : <p>로그인이 필요합니다.</p>;
  };
}

function Dashboard() {
  return <h2>대시보드</h2>;
}

const ProtectedDashboard = withAuth(Dashboard);

function App() {
  return <ProtectedDashboard />;
}

 

📌 설명:

  • withAuth HOC는 Component를 감싸서 로그인 여부를 확인하는 기능을 추가.
  • Dashboard 컴포넌트는 withAuth를 통해 보호된 상태로 동작.

💡 이 방식의 장점:

  • 코드 중복을 줄이고 공통 기능을 추상화할 수 있음.
  • 여러 컴포넌트에 동일한 기능을 손쉽게 적용 가능.

 

 

🔸 4. Context API를 활용한 전역 상태 관리

컴포넌트 간 상태를 쉽게 공유할 수 있도록 도와주는 기능

 

✅ 예제: 테마 변경 기능 적용

import { createContext, useContext, useState } from "react";

const ThemeContext = createContext();

function ThemeProvider({ children }) {
  const [theme, setTheme] = useState("light");
  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      {children}
    </ThemeContext.Provider>
  );
}

function ThemedButton() {
  const { theme, setTheme } = useContext(ThemeContext);
  return (
    <button onClick={() => setTheme(theme === "light" ? "dark" : "light")}>
      현재 테마: {theme}
    </button>
  );
}

function App() {
  return (
    <ThemeProvider>
      <ThemedButton />
    </ThemeProvider>
  );
}

 

📌 설명:

  • ThemeContext를 생성하여 전역 상태 관리 가능.
  • useContext(ThemeContext)를 통해 컴포넌트 어디서든 theme 값을 사용 가능.

💡 이 방식의 장점:

  • 상태를 전역적으로 관리할 수 있어 Props Drilling을 방지.
  • 여러 컴포넌트에서 동일한 데이터를 쉽게 공유 가능.

 

 

🔸 5. 개념 요약

컴포넌트의 재사용성을 높이면 코드 유지보수가 쉬워짐
모듈화를 통해 가독성이 향상되고 협업이 쉬워짐
고차 컴포넌트(HOC)를 활용하면 공통 기능을 손쉽게 적용 가능
Context API를 활용하면 전역 상태를 쉽게 관리 가능
적절한 패턴을 활용하여 최적화된 컴포넌트 구조를 설계할 수 있음


 

반응형

댓글