# [[Component-Based Design|Component-Based Design]] ## πŸ“Œ Brief Summary μ»΄ν¬λ„ŒνŠΈ 기반 λ””μžμΈ(Component-Based Design)은 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό μž¬μ‚¬μš© κ°€λŠ₯ν•˜κ³  이식성이 λ›°μ–΄λ‚˜λ©° 예츑 κ°€λŠ₯ν•œ λͺ¨λ“ˆμ‹ ꡬ성 μš”μ†Œλ‘œ κ΅¬μΆ•ν•˜λŠ” μ•„ν‚€ν…μ²˜ μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€ [1, 2]. μ΄λŠ” κ±°λŒ€ν•œ 단일 μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” λ°©μ‹μ—μ„œ λ²—μ–΄λ‚˜, μ‘°ν•©(Composition)을 톡해 λ ˆμ΄μ•„μ›ƒκ³Ό λ™μž‘μ„ μ‘°λ¦½ν•¨μœΌλ‘œμ¨ 'ν”„λ‘­ λ“œλ¦΄λ§([[Prop Drilling|Prop Drilling]])'κ³Ό μˆ¨κ²¨μ§„ 결합도λ₯Ό μ€„μž…λ‹ˆλ‹€ [3-5]. 단일 μ±…μž„ 원칙과 λͺ…μ‹œμ μΈ API 계약을 μ€€μˆ˜ν•¨μœΌλ‘œμ¨, λ³€ν™”ν•˜λŠ” μš”κ΅¬μ‚¬ν•­μ— μœ μ—°ν•˜κ²Œ μ μ‘ν•˜κ³  ν™•μž₯ν•  수 μžˆλŠ” ν™•μž₯μ„± 높은 UI μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λŠ” 데 핡심적인 역할을 ν•©λ‹ˆλ‹€ [6-8]. ## πŸ“– Core Content - **μ›μžμ  섀계([[Atomic Design|Atomic Design]]) 계측 ꡬ쑰**: μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λŠ” 더 이상 λΆ„ν•΄ν•  수 μ—†λŠ” κΈ°λ³Έ μš”μ†ŒμΈ μ›μž(Atoms), 이듀이 λͺ¨μΈ λΆ„μž(Molecules), 더 λ³΅μž‘ν•œ 유기체(Organisms), ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” ν…œν”Œλ¦Ώ(Templates), 그리고 μ‹€μ œ μ½˜ν…μΈ κ°€ μ±„μ›Œμ§€λŠ” νŽ˜μ΄μ§€(Pages)의 5λ‹¨κ³„λ‘œ μ²΄κ³„ν™”ν•˜μ—¬ 섀계할 수 μžˆμŠ΅λ‹ˆλ‹€ [9-12]. - **μž¬μ‚¬μš©μ„±μ„ μœ„ν•œ 핡심 원칙**: ν›Œλ₯­ν•œ μž¬μ‚¬μš© κ°€λŠ₯ μ»΄ν¬λ„ŒνŠΈλŠ” 단일 μ±…μž„(Single Responsibility) 원칙을 λ”°λ₯΄κ³ , μƒμ†λ³΄λ‹€λŠ” μ‘°ν•©(Composition)을 μš°μ„ ν•˜λ©°, λͺ…ν™•ν•œ API 계약을 κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€ [8]. λ‚΄λΆ€ μƒνƒœλ₯Ό μ΅œμ†Œν™”ν•˜μ—¬ 예츑 κ°€λŠ₯성을 높이고, μ ‘κ·Όμ„±([[Accessibility|Accessibility]])을 기본적으둜 λ‚΄μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€ [8, 13]. - **ν”„λ‘­(Prop) κΈ°λ°˜μ—μ„œ μ‘°ν•©(Composition) 기반 API둜의 μ „ν™˜**: λͺ¨λ“  ꡬ성 μ˜΅μ…˜μ„ ν”„λ‘­μœΌλ‘œ μ „λ‹¬ν•˜λŠ” 방식은 μ»΄ν¬λ„ŒνŠΈλ₯Ό λ³€κ²½ν•˜κΈ° μ–΄λ €μš΄ 'λΈ”λž™ λ°•μŠ€'둜 λ§Œλ“€λ©° κΈ°ν•˜κΈ‰μˆ˜μ μΈ λ³΅μž‘μ„±μ„ μ΄ˆλž˜ν•©λ‹ˆλ‹€ [14-16]. λŒ€μ‹ , μ±…μž„μ„ λΆ„μ‚°μ‹œμΌœ μ‚¬μš©μžκ°€ ν•„μš”μ— 따라 ν•˜μœ„ μš”μ†Œλ₯Ό μ‘°λ¦½ν•˜κ²Œ ν•˜λŠ” μ‘°ν•© 기반 μ ‘κ·Ό 방식이 λŒ€κ·œλͺ¨ UI ν™•μž₯에 μœ λ¦¬ν•©λ‹ˆλ‹€ [3, 5]. - **ν™•μž₯ κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ νŒ¨ν„΄**: - **볡합 μ»΄ν¬λ„ŒνŠΈ([[Compound Components|Compound Components]])**: React μ»¨ν…μŠ€νŠΈλ₯Ό ν™œμš©ν•˜μ—¬ νƒ­(Tabs)μ΄λ‚˜ μ•„μ½”λ””μ–Έ(Accordion)κ³Ό 같은 μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈκ°€ μ•”μ‹œμ μœΌλ‘œ μƒνƒœλ₯Ό κ³΅μœ ν•˜λŠ” νŒ¨ν„΄μœΌλ‘œ, ν”„λ‘­ λΉ„λŒ€ν™” 없이 높은 λ ˆμ΄μ•„μ›ƒ 쑰립 μœ μ—°μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€ [4, 16-18]. - **ν—€λ“œλ¦¬μŠ€ μ»΄ν¬λ„ŒνŠΈ([[Headless Components|Headless Components]])**: λ³΅μž‘ν•œ μƒνƒœ 관리와 λ…Όλ¦¬λ§Œ μΊ‘μŠν™”ν•˜κ³  UI λ§ˆν¬μ—…κ³Ό μŠ€νƒ€μΌλ§μ€ μ˜¨μ „νžˆ μ†ŒλΉ„μžμ—κ²Œ μœ„μž„ν•˜μ—¬, νŠΉμ • λ””μžμΈ μ‹œμŠ€ν…œμ— ꡬ애받지 μ•ŠλŠ” μœ μ—°μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€ [16, 19, 20]. - **λ Œλ” ν”„λ‘­([[Render Props|Render Props]])**: λ Œλ”λ§ ν•¨μˆ˜λ₯Ό μžμ‹μ΄λ‚˜ ν”„λ‘­μœΌλ‘œ μ „λ‹¬ν•˜μ—¬ 논리λ₯Ό κ³΅μœ ν•˜λŠ” κΈ°λ²•μœΌλ‘œ, μ‚¬μš©μžμ—κ²Œ λ Œλ”λ§ 결과에 λŒ€ν•œ μ™„μ „ν•œ μ œμ–΄κΆŒμ„ μ€λ‹ˆλ‹€ [16, 20, 21]. - **μ˜€λ²„λΌμ΄λ“œ νŒ¨ν„΄([[Overrides Pattern|Overrides Pattern]])**: μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ˜ ν•˜μœ„ μš”μ†Œμ— λŒ€ν•œ μ‹λ³„μžλ₯Ό λ…ΈμΆœν•˜μ—¬, 맀번 μƒˆλ‘œμš΄ 프둭을 μΆ”κ°€ν•  ν•„μš” 없이 νŠΉμ • λ‚΄λΆ€ μš”μ†Œμ˜ μŠ€νƒ€μΌμ΄λ‚˜ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ₯Ό 깊게 μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•  수 있게 ν•©λ‹ˆλ‹€ [16, 22, 23]. - **λ””μžμΈ 토큰([[Design Tokens|Design Tokens]]) 바인딩**: μ»΄ν¬λ„ŒνŠΈλŠ” ν•˜λ“œμ½”λ”©λœ λ¦¬ν„°λŸ΄ κ°’(예: `#dc2222`)을 ν”Όν•˜κ³  λ””μžμΈ 토큰(예: `color.error`)을 μ°Έμ‘°ν•˜μ—¬ 바인딩해야 ν•©λ‹ˆλ‹€ [24, 25]. 이λ₯Ό 톡해 간격, 색상, νƒ€μ΄ν¬κ·Έλž˜ν”Ό λ“±μ˜ λ””μžμΈ μš”μ†Œκ°€ 변경될 λ•Œ μ‹œμŠ€ν…œ 전체에 μΌκ΄€λœ μ—…λ°μ΄νŠΈκ°€ μžλ™μœΌλ‘œ λ°˜μ˜λ©λ‹ˆλ‹€ [24]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Atomic Design|Atomic Design]], Compound Components, Headless Components, [[Design Tokens|Design Tokens]], [[Feature-Sliced Design|Feature-Sliced Design]] - **Projects/Contexts:** [[Uber Base Web|Uber Base Web]], Shopify Polaris, [[Radix UI|Radix UI]] - **Contradictions/Notes:** μ›μžμ  섀계(Atomic Design)λŠ” μ‹œκ°μ  일관성을 μœ μ§€ν•˜λŠ” 데 νš¨κ³Όμ μ΄μ§€λ§Œ, λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ ν¬ν•¨ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μ—„κ²©ν•œ 범주에 μ–΅μ§€λ‘œ 맞좜 λ•Œ ꡬ쑰적 ν•œκ³„μ— λΆ€λ”ͺ힐 수 μžˆμœΌλ―€λ‘œ μ‹€λ¬΄μ—μ„œλŠ” κΈ°λŠ₯(Feature) 기반 ꡬ쑰와 κ²°ν•©ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [26, 27]. λ˜ν•œ, 볡합 μ»΄ν¬λ„ŒνŠΈ νŒ¨ν„΄μ€ μ†ŒλΉ„μžμ—κ²Œ λ§‰κ°•ν•œ μœ μ—°μ„±μ„ μ œκ³΅ν•˜μ§€λ§Œ, λ„ˆλ¬΄ λ§Žμ€ 자유λ₯Ό ν—ˆμš©ν•˜λ©΄ μΌκ΄€λœ UIλ‚˜ 접근성이 훼손될 수 μžˆμœΌλ―€λ‘œ λ””μžμΈ μ‹œμŠ€ν…œ μ°¨μ›μ—μ„œ μ•ˆμ „ν•œ ꡬ성 경계(composition [[Boundaries|Boundaries]])λ₯Ό λ¬Έμ„œν™”ν•˜λŠ” 것이 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [28, 29]. --- *Last updated: 2026-04-26*