Skip to content

Compound Component Pattern

yoycode edited this page Jul 9, 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