Skip to content

Compound Component Pattern

yoycode edited this page Jun 14, 2023 · 6 revisions

Compound Component

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>

๊ฐ๊ฐ์˜ ์ฝ”๋“œ ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ๋ถ„์„ํ•˜๋ฉด, ๊ฐ๊ฐ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค:

  1. ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ props๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
  2. optionalํ•˜๊ฒŒ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ๋  ๊ฒƒ๋งŒ property๋กœ ๋„˜๊ธฐ๋Š” ๋ฐฉ์‹
  3. ๋ถ„๋ฆฌ ๊ฐ€๋Šฅํ•œ ์š”์†Œ๋Š” ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋กœ ์ƒ์„ฑ
  4. ๋ถ„๋ฆฌ ๊ฐ€๋Šฅํ•œ ์š”์†Œ๋ฅผ ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋กœ ์ƒ์„ฑํ•˜๋˜, ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด Dot Notation ๋ฐฉ์‹ ์‚ฌ์šฉ

์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์™œ Compound Component ํŒจํ„ด์ธ๊ฐ€์š”?

ํŒ€ ๋‚ด ํ‰๊ฐ€ ๊ฒฐ๊ณผ, Dot Notation์„ ์‚ฌ์šฉํ•œ Compound Component ํ˜•ํƒœ์˜ 4๋ฒˆ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ€์žฅ ์ปดํฌ๋„ŒํŠธ ์ง€ํ–ฅ์ ์ด๋ฉฐ, ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ๊ฒฐ๋ก ์— ๋„๋‹ฌ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Compound Component ํŒจํ„ด์€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉด์„œ๋„ ์ปดํฌ๋„ŒํŠธ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋Š” ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์กด์žฌํ•˜๋ฉด์„œ๋„, ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค๊ณผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹

Compound Component ํŒจํ„ด์€ React์˜ Context API์™€ ๊ฐ™์€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด, ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์—๊ฒŒ ์ƒํƒœ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ๊ณต์œ ํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์˜ ์—ญํ• ์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด์„œ๋„ ํ•„์š”ํ•œ ์ •๋ณด๋‚˜ ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

JDesignSystem์€ ์ด๋Ÿฐ Compound Component ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ, ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ๋…๋ฆฝ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง๊ด€์ ์ด๊ณ  ์œ ์—ฐํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์œ ์—ฐํ•œ UI๋ฅผ ์†์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

Clone this wiki locally