-
Notifications
You must be signed in to change notification settings - Fork 3
Compound Component Pattern
JDesignSystem์ ๋ณต์กํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ํ ๋์ ์์ค์ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ Compound Component ํจํด์ ์ฑํํ์์ต๋๋ค.
๋ค๋ฅธ ๋์์ธ์์คํ ๋๋ฌ๋ณด๊ธฐ
๋ง์ ๋์์ธ์์คํ ๋ค์ด ๊ทธ๋ค๋ง์ ์ฝ๋ ์ธํฐํ์ด์ค ์ปจ์ ์ ๋ณด์ ํ๊ณ ์์ต๋๋ค. JDesignSystem ์ญ์ ์ด๋ฌํ ์ ์ ๊ณ ๋ คํ์ฌ, ์ฐ๋ฆฌ๋ง์ ์ปดํฌ๋ํธ ์ธํฐํ์ด์ค์ ์ปจ์ ์ ์ฑํํด ์ด ์ปจ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ค์ ์์ฑํด ๋๊ฐ์ต๋๋ค.
์ฐ์ ๋ค๋ฅธ ๋์์ธ์์คํ ๋ค์์ ๋ณด์ฌ์ง๋ Button ์ปดํฌ๋ํธ์ ์ธํฐํ์ด์ค ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
<Button
icon={<Icon type="gear" />}
label="Customize"
/><Button icon="gear">
Customize
</Button><Button>
Customize
<ButtonIcon type="gear" />
</Button><Button>
Customize
<Button.Icon type="gear" />
</Button>๊ฐ๊ฐ์ ์ฝ๋ ์ธํฐํ์ด์ค๋ค์ ๋ถ์ํ๋ฉด, ๊ฐ๊ฐ์ด ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์์์ ์ ์ ์์์ต๋๋ค:
- ์ปดํฌ๋ํธ์ ๋ชจ๋ ์ ๋ณด๋ฅผ props๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์
- optionalํ๊ฒ ์ถ๊ฐ๋ก ์ฌ์ฉ๋ ๊ฒ๋ง property๋ก ๋๊ธฐ๋ ๋ฐฉ์
- ๋ถ๋ฆฌ ๊ฐ๋ฅํ ์์๋ ์๋ก์ด ์ปดํฌ๋ํธ๋ก ์์ฑ
- ๋ถ๋ฆฌ ๊ฐ๋ฅํ ์์๋ฅผ ์๋ก์ด ์ปดํฌ๋ํธ๋ก ์์ฑํ๋, ์ปดํฌ๋ํธ ๋ด๋ถ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด Dot Notation ๋ฐฉ์ ์ฌ์ฉ
์ผ๋ก ๋๋ ์ ์์์ต๋๋ค.
์ Compound Component ํจํด์ธ๊ฐ์?
ํ ๋ด ํ๊ฐ ๊ฒฐ๊ณผ, Dot Notation์ ์ฌ์ฉํ Compound Component ํํ์ 4๋ฒ ์ธํฐํ์ด์ค๊ฐ ๊ฐ์ฅ ์ปดํฌ๋ํธ ์งํฅ์ ์ด๋ฉฐ, ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌ ํ์ต๋๋ค.
Compound Component ํจํด์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉ์์๊ฒ ๋ ์ง๊ด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ฉด์๋ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ์ ์ ์๊ฒ ํด์ค๋๋ค. ๋ํ, ์ด๋ ๊ฐ ์ปดํฌ๋ํธ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์กด์ฌํ๋ฉด์๋, ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค๊ณผ ์์ฐ์ค๋ฝ๊ฒ ์ํธ์์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ด๋ถ ๋์ ๋ฐฉ์
Compound Component ํจํด์ React์ Context API์ ๊ฐ์ ๋ฉ์ปค๋์ฆ์ ํตํด, ์์ ์ปดํฌ๋ํธ๊ฐ ํ์ ์ปดํฌ๋ํธ๋ค์๊ฒ ์ํ๋ ๋ฉ์๋๋ฅผ ์๋ฌต์ ์ผ๋ก ๊ณต์ ํ๋๋ก ๋ง๋ญ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๊ฐ ์ปดํฌ๋ํธ๋ ์์ ์ ์ญํ ์๋ง ์ง์คํ๋ฉด์๋ ํ์ํ ์ ๋ณด๋ ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๊ฒ ๋์ด, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋ฉ๋๋ค.
JDesignSystem์ ์ด๋ฐ Compound Component ํจํด์ ์ ์ฉํ์ฌ, ๊ฐ ์ปดํฌ๋ํธ์ ๋ ๋ฆฝ์ฑ์ ์ ์งํ๋ฉด์๋ ์ฌ์ฉ์์๊ฒ ์ง๊ด์ ์ด๊ณ ์ ์ฐํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ก ์ธํด ์ ์ฐํ UI๋ฅผ ์์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๊ฒ๋ฉ๋๋ค.