# [[Styled Components]] ## πŸ“Œ[[ brief]] Summary Styled ComponentsλŠ” React 및 [[Next.js]] ν™˜κ²½μ—μ„œ μ‚¬μš©λ˜λŠ” λŒ€ν‘œμ μΈ [[CSS-in-JS]] 라이브러리둜, μžλ°”μŠ€ν¬λ¦½νŠΈ 파일 λ‚΄μ—μ„œ νƒœκ·Έλœ ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄(tagged template literals)을 μ‚¬μš©ν•˜μ—¬ CSSλ₯Ό 직접 μž‘μ„±ν•  수 있게 ν•΄μ€λ‹ˆλ‹€ [1, 2]. 이 방식은 μ»΄ν¬λ„ŒνŠΈμ™€ μŠ€νƒ€μΌ μ½”λ“œλ₯Ό 같은 곳에 μœ„μΉ˜(co-location)μ‹œν‚€κ³  μžλ™μœΌλ‘œ κ³ μœ ν•œ 클래슀λͺ…을 μƒμ„±ν•˜μ—¬ μŠ€νƒ€μΌμ˜ μ „μ—­ μΆ©λŒμ„ λ°©μ§€ν•©λ‹ˆλ‹€ [3, 4]. ν”„λ‘­μŠ€(props)와 μƒνƒœ([[State]])λ₯Ό 기반으둜 ν•œ 동적 μŠ€νƒ€μΌλ§μ— 맀우 κ°•λ ₯ν•˜μ§€λ§Œ, λŸ°νƒ€μž„ CSS μƒμ„±μœΌλ‘œ μΈν•œ μ„±λŠ₯ μ˜€λ²„ν—€λ“œμ™€ 졜근의 [[React Server Components]](RSC) ν™˜κ²½μ—μ„œμ˜ ν˜Έν™˜μ„± μ²˜λ¦¬λΌλŠ” 과제λ₯Ό μ•ˆκ³  μžˆμŠ΅λ‹ˆλ‹€ [4-6]. ## πŸ“– Core Content * **동적 μŠ€νƒ€μΌλ§ 및 ν…Œλ§ˆ μ‹œμŠ€ν…œ**: Styled ComponentsλŠ” ν”„λ‘­μŠ€μ™€ μƒνƒœ, 그리고 ν…Œλ§ˆλ₯Ό ν™œμš©ν•΄ μžμ—°μŠ€λŸ¬μš΄ 동적 μŠ€νƒ€μΌλ§μ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€ [4, 6]. λΌμ΄λΈŒλŸ¬λ¦¬μ— λ‚΄μž₯된 `ThemeProvider`λŠ” [[Context API]]λ₯Ό 톡해 μ•± ν•˜μœ„μ˜ λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈμ— ν…Œλ§ˆλ₯Ό μ£Όμž…ν•  수 μžˆμ–΄ 닀크 λͺ¨λ“œλ‚˜ 닀쀑 λΈŒλžœλ“œ ν…Œλ§ˆλ₯Ό κ΅¬μΆ•ν•˜λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€ [4, 7]. * **μ£Όμš” μ»΄ν¬λ„ŒνŠΈ API**: * **`as` ν”„λ‘­μŠ€**: μ»΄ν¬λ„ŒνŠΈμ— 적용된 μŠ€νƒ€μΌμ€ κ·ΈλŒ€λ‘œ μœ μ§€ν•˜λ©΄μ„œ, λŸ°νƒ€μž„μ— λ Œλ”λ§λ˜λŠ” μ‹€μ œ HTML νƒœκ·Έλ‚˜ React μ»΄ν¬λ„ŒνŠΈλ₯Ό λ³€κ²½ν•  수 μžˆλŠ” λ‹€ν˜•μ„±(polymorphism)을 μ œκ³΅ν•©λ‹ˆλ‹€ [8]. * **νŠΈλžœμ§€μ–ΈνŠΈ ν”„λ‘­μŠ€ (Transient props)**: μŠ€νƒ€μΌλ§ μ»΄ν¬λ„ŒνŠΈ μ „μš©μœΌλ‘œ μ‚¬μš©λ˜λ©° μ‹€μ œ DOM λ…Έλ“œμ—λŠ” μ „λ‹¬λ˜μ§€ μ•ŠκΈ°λ₯Ό μ›ν•˜λŠ” ν”„λ‘­μŠ€μ˜ 경우, 이름 μ•žμ— λ‹¬λŸ¬ 기호(`$`)λ₯Ό λΆ™μ—¬ 필터링할 수 μžˆμŠ΅λ‹ˆλ‹€ [9, 10]. * **μ„±λŠ₯ 및 λ²ˆλ“€ μ‚¬μ΄μ¦ˆμ˜ ν•œκ³„**: λŸ°νƒ€μž„μ— CSS λ¬Έμžμ—΄μ„ μƒμ„±ν•˜κ³  λΈŒλΌμš°μ €μ— μ£Όμž…ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— CPU 및 [[JavaScript]] μ‹€ν–‰ λΉ„μš©(λŸ°νƒ€μž„ ν…μŠ€)이 λ°œμƒν•©λ‹ˆλ‹€ [4, 6]. 라이브러리 μΆ”κ°€λ‘œ 인해 λ²ˆλ“€ μ‚¬μ΄μ¦ˆκ°€ μ•½ 30kb(gzipped) μ¦κ°€ν•˜λ©°, λŒ€κ·œλͺ¨ λ Œλ”λ§(예: 10,000개 리슀트 μ•„μ΄ν…œ) μ‹œ λΉŒλ“œ νƒ€μž„ 기반의 [[Tailwind CSS]](85ms)보닀 λ Œλ”λ§ μ‹œκ°„(148ms)이 더 였래 κ±Έλ¦¬λŠ” λ“± μ„±λŠ₯ μ΅œμ ν™” λ©΄μ—μ„œ ν•œκ³„λ₯Ό λ³΄μž…λ‹ˆλ‹€ [5, 6, 11]. * **[[React [[Server Components]] (RSC)]] ν˜Έν™˜μ„±κ³Ό Next.js 톡합**: Styled Components의 ν…Œλ§ˆ κΈ°λŠ₯은 [[React Context]]에 μ˜μ‘΄ν•˜λ―€λ‘œ, Contextκ°€ μ—†λŠ” μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ(RSC) ν™˜κ²½μ—μ„œλŠ” 기본적으둜 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [12, 13]. [[Next.js 15]]의 App Routerμ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ Œλ”λ§ 쀑 CSS κ·œμΉ™μ„ μˆ˜μ§‘ν•˜μ—¬ ``에 μ£Όμž…ν•˜λŠ” 'μŠ€νƒ€μΌ λ ˆμ§€μŠ€νŠΈλ¦¬([[Style Registry]]) νŒ¨ν„΄'을 μ μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [14]. λ˜ν•œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ ν•˜μ΄λ“œλ ˆμ΄μ…˜([[Hydration]]) 뢈일치λ₯Ό 막기 μœ„ν•΄ 컴파일러 μ„€μ •(`styledComponents`)을 ν™œμ„±ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€ [15]. μ΅œμ‹  버전(v6.3.0 이상)μ—μ„œλŠ” RSC ν™˜κ²½μ—μ„œ μžλ™μœΌλ‘œ 인라인 `