# Type Composition — 재사용 컴포넌트 합성은 타입 의존성으로 고른다

적용: 재사용 컴포넌트(테이블·리스트·셀렉트류) 설계 시.

- 부품 간 **타입 의존성이 강하면**(예: columns ↔ data가 같은 T를 공유) → **단일 제네릭 컴포넌트 / render props**. 쪼개면 타입이 끊긴다.
- **의존성이 약하면**(예: Trigger ↔ Content가 서로의 타입을 모름) → **compound component** (`Dialog.Trigger` 형태).
- **부분적이면** → render props로 공유 부분만 콜백 인자로 넘긴다.
- **compound의 함정**: children이 `ReactNode`로 풀리는 순간 타입 추론이 끊긴다 — 타입이 흘러야 하는 곳엔 쓰지 않는다.
- **불필요한 추상화 3신호** (하나라도 보이면 재고): ①한 용도인데 generic ②래퍼가 props를 그대로 전달만 ③커스텀 훅이 특정 컴포넌트 로직의 1:1 복사. "파일이 길어서"는 분리 이유가 아니다.
