본문 바로가기
Programming

React 디자인 패턴

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 11. 8.
반응형

🎨 디자인 패턴

리액트 프로젝트가 커질수록 유지보수, 확장성이 중요해집니다. 이를 위해 다양한 디자인 패턴을 적용할 수 있으며, 이번 글에서는 Container-Presenter 패턴을 중심으로 자주 쓰이는 React 패턴들을 소개합니다.

🧱 1. Container-Presenter 패턴

UI와 로직을 분리하는 패턴으로, 다음과 같은 구조를 가집니다.

  • Container: 상태 관리, 비즈니스 로직 담당 (데이터 처리)
  • Presenter: 순수 UI 컴포넌트 (props로만 동작)

📘 예제

// CounterContainer.js import React, { useState } from 'react'; import Counter from './Counter'; function CounterContainer() { const [count, setCount] = useState(0); return ( <Counter count={count} onIncrease={() => setCount(count + 1)} onDecrease={() => setCount(count - 1)} /> ); } export default CounterContainer; // Counter.js function Counter({ count, onIncrease, onDecrease }) { return ( <div> <h1>{count}</h1> <button onClick={onIncrease}>+</button> <button onClick={onDecrease}>-</button> </div> ); } export default Counter;

장점: 테스트가 쉬워지고, UI와 로직을 독립적으로 관리할 수 있습니다.

📦 2. Presentational and Container Pattern

React 공식 문서에서도 추천했던 패턴으로, 위와 유사하게 재사용성과 분리에 초점을 둡니다.

🔁 3. HOC (Higher-Order Components)

컴포넌트를 인자로 받아 새로운 기능이 추가된 컴포넌트를 반환합니다.

const withLogger = (Component) => { return (props) => { console.log('렌더링 중:', props); return <Component {...props} />; }; };

📚 4. Render Props 패턴

함수를 props로 전달하여 컴포넌트 내부에서 호출하는 방식입니다.

function DataFetcher({ render }) { const data = fetchSomeData(); return render(data); }

🧩 5. Compound Components 패턴

부모 컴포넌트가 상태를 공유하고, 자식 컴포넌트들이 이를 이용해 UI를 구성합니다. 대표적인 예: <Tabs><Tab></Tab></Tabs>

✅ 마무리

  • Container-Presenter는 가장 많이 쓰이는 패턴으로, UI/로직 분리에 탁월합니다.
  • HOC, Render Props는 재사용성을 높이는 고급 패턴입니다.
  • Compound와 Context는 확장성과 모듈화에 효과적입니다.
반응형

'Programming' 카테고리의 다른 글

JAVA 소개 및 개발 환경 구축  (58) 2025.11.10
React 프로젝트 구조 설계  (33) 2025.11.09
React Testing Library  (56) 2025.11.07
React 성능 최적화  (68) 2025.11.06
React SSR / CSR / ISR 개념과 Next.js 소개  (72) 2025.11.05