# Snippet
URL: /react/components/concepts/snippet
Source: https://github.com/daangn/seed-design/blob/dev/docs/content/react/components/concepts/snippet.mdx
자주 사용되는 UI 패턴을 스니펫으로 제공하여 개발 효율성을 높이는 방법을 안내합니다.
## 개요
Snippet은 Compound Components를 기본으로 채택하면서도 개발자 경험(DX)을 최적화하기 위한 해결책입니다. 복잡한 compound components를 간단하게 사용할 수 있도록 도와주는 패턴입니다.
## Compound Components
기존의 닫힌 컴포넌트 방식에서는 컴포넌트의 커스터마이징이 제한적이었습니다. 예를 들어, 다음과 같은 닫힌 컴포넌트는:
```tsx
Click me
```
내부 구현이 숨겨져 있어 다음과 같은 커스터마이징 요구사항을 해결하기 어려웠습니다:
- label에 스타일을 추가하는 방법
- 체크박스의 아이콘을 변경하는 방법
- ref를 div와 input에 각각 전달하는 방법
이러한 문제를 해결하기 위해 compound components 패턴을 도입했습니다:
```tsx
Click me
```
## Snippet의 필요성
Compound components는 뛰어난 유연성을 제공하지만, 매번 이렇게 자세한 구현을 작성하는 것은 번거로울 수 있습니다. 이러한 유연성과 DX간의 trade-off를 해결하기 위해 Snippet 개념이 도입되었습니다.
## Snippet 사용하기
### CLI 실행
다음 명령어를 통해 필요한 컴포넌트의 snippet을 프로젝트에 추가할 수 있습니다:
```bash
npx @seed-design/cli add
```
CLI 명령어에 대해 더 알아봅니다.
### 생성된 Snippet 활용
CLI 실행 후, `seed-design/ui/*` 디렉토리에 snippet이 생성됩니다. 예를 들어:
```tsx
// seed-design/ui/checkbox.tsx
export const Checkbox = React.forwardRef(
({ inputProps, rootRef, label, variant = "square", ...otherProps }, ref) => {
return (
: null}
checked={}
indeterminate={}
/>
{label}
);
}
);
```
### 사용
Snippet을 통해 복잡한 compound components를 간단하게 사용할 수 있습니다:
```tsx
import { Checkbox } from "@/seed-design/ui/checkbox";
const Demo = () => Click me;
```