-
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 ๋ฐฉ์ ์ฌ์ฉ
์ผ๋ก ๋๋ ์ ์์์ต๋๋ค.
ํ ๋ด ํ๊ฐ ๊ฒฐ๊ณผ, Dot Notation์ ์ฌ์ฉํ Compound Component ํํ์ 4๋ฒ ์ธํฐํ์ด์ค๊ฐ ๊ฐ์ฅ ์ปดํฌ๋ํธ ์งํฅ์ ์ด๋ฉฐ, ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌ ํ์ต๋๋ค.
Compound Component ํจํด์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉ์์๊ฒ ๋ ์ง๊ด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ฉด์๋ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ์ ์ ์๊ฒ ํด์ค๋๋ค. ๋ํ, ์ด๋ ๊ฐ ์ปดํฌ๋ํธ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์กด์ฌํ๋ฉด์๋, ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค๊ณผ ์์ฐ์ค๋ฝ๊ฒ ์ํธ์์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
Compound Component ํจํด์ React์ Context API์ ๊ฐ์ ๋ฉ์ปค๋์ฆ์ ํตํด, ์์ ์ปดํฌ๋ํธ๊ฐ ํ์ ์ปดํฌ๋ํธ๋ค์๊ฒ ์ํ๋ ๋ฉ์๋๋ฅผ ์๋ฌต์ ์ผ๋ก ๊ณต์ ํ๋๋ก ๋ง๋ญ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๊ฐ ์ปดํฌ๋ํธ๋ ์์ ์ ์ญํ ์๋ง ์ง์คํ๋ฉด์๋ ํ์ํ ์ ๋ณด๋ ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๊ฒ ๋์ด, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋ฉ๋๋ค.
JDesignSystem์ ์ด๋ฐ Compound Component ํจํด์ ์ ์ฉํ์ฌ, ๊ฐ ์ปดํฌ๋ํธ์ ๋ ๋ฆฝ์ฑ์ ์ ์งํ๋ฉด์๋ ์ฌ์ฉ์์๊ฒ ์ง๊ด์ ์ด๊ณ ์ ์ฐํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ก ์ธํด ์ ์ฐํ UI๋ฅผ ์์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๊ฒ๋ฉ๋๋ค.