# [[SOLID Principles in React]] ## πŸ“Œ Brief Summary SOLID 원칙은 단일 μ±…μž„(SRP), 개방-폐쇄(OCP), λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜(LSP), μΈν„°νŽ˜μ΄μŠ€ 뢄리(ISP), μ˜μ‘΄μ„± μ—­μ „(DIP)의 λ‹€μ„― κ°€μ§€ 섀계 원칙을 μ˜λ―Έν•˜λŠ” μ•½μ–΄μž…λ‹ˆλ‹€ [1, 2]. 본래 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)을 μœ„ν•΄ κ³ μ•ˆλ˜μ—ˆμ§€λ§Œ, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ μ£Όλ„ν•˜λŠ” ν˜„λŒ€ React μƒνƒœκ³„μ—μ„œλ„ μ»΄ν¬λ„ŒνŠΈμ˜ μœ μ§€λ³΄μˆ˜μ„±, 가독성, ν™•μž₯성을 λ†’μ΄λŠ” 데 ν•„μˆ˜μ μœΌλ‘œ μ μš©λ©λ‹ˆλ‹€ [2, 3]. 이 원칙은 주둜 λͺ…ν™•ν•œ ꡬ쑰와 ν™•μž₯성이 μš”κ΅¬λ˜λŠ” 크고 λ³΅μž‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  λ•Œ 효과적으둜 μ‚¬μš©λ©λ‹ˆλ‹€ [4]. ## πŸ“– Core λŒ€Content * **단일 μ±…μž„ 원칙 (SRP, Single Responsibility Principle)** React μ»΄ν¬λ„ŒνŠΈλ‚˜ 훅은 단 ν•˜λ‚˜μ˜ λͺ…ν™•ν•œ λͺ©μ μ„ κ°€μ Έμ•Ό ν•˜λ©°, λ³€κ²½λ˜μ–΄μ•Ό ν•˜λŠ” μ΄μœ λ„ 단 ν•˜λ‚˜μ—¬μ•Ό ν•©λ‹ˆλ‹€ [5, 6]. 예λ₯Ό λ“€μ–΄, 300쀄이 λ„˜μ–΄κ°€λŠ” μ»΄ν¬λ„ŒνŠΈλŠ” μƒνƒœ 관리, 데이터 페칭, λ³΅μž‘ν•œ JSX λ Œλ”λ§ λ“± λ„ˆλ¬΄ λ§Žμ€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μžˆμ„ κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€ [5]. 이λ₯Ό 더 μž‘κ³  ν•œ κ°€μ§€ μ—­ν• λ§Œ ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‚˜ μ»€μŠ€ν…€ ν›…μœΌλ‘œ λΆ„λ¦¬ν•˜λ©΄ μ½”λ“œμ˜ λͺ…ν™•μ„±κ³Ό ν…ŒμŠ€νŠΈ κ°€λŠ₯성이 크게 ν–₯μƒλ©λ‹ˆλ‹€ [2, 5]. * **개방-폐쇄 원칙 (OCP, Open/Closed Principle)** μ†Œν”„νŠΈμ›¨μ–΄ μ—”ν‹°ν‹°λŠ” ν™•μž₯을 μœ„ν•΄μ„œλŠ” μ—΄λ € μžˆμ–΄μ•Ό ν•˜μ§€λ§Œ μˆ˜μ •μ„ μœ„ν•΄μ„œλŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€ [2]. Reactμ—μ„œλŠ” κΈ°μ‘΄ μ»΄ν¬λ„ŒνŠΈμ˜ λ‚΄λΆ€ μ½”λ“œλ₯Ό 직접 μˆ˜μ •ν•˜λŠ” λŒ€μ‹ , μ»΄ν¬λ„ŒνŠΈ ν•©μ„±(composition), `children` prop, λ˜λŠ” λ Œλ” ν”„λ‘­μŠ€(render props)λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μœ μ—°ν•˜κ²Œ ν™•μž₯ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ©λ‹ˆλ‹€ [2, 6, 7]. * **λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 (LSP, Liskov Substitution Principle)** ν•˜μœ„(μžμ‹) νƒ€μž…μ˜ 객체가 μƒμœ„(λΆ€λͺ¨) νƒ€μž…μ˜ 객체λ₯Ό μ½”λ“œλ₯Ό κΉ¨λœ¨λ¦¬μ§€ μ•Šκ³  μ™„λ²½ν•˜κ²Œ λŒ€μ²΄ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” μ›μΉ™μž…λ‹ˆλ‹€ [2, 8]. Reactμ—μ„œλŠ” ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈκ°€ κΈ°λ³Έ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ›ν™œν•˜κ²Œ λŒ€μ²΄ν•  수 μžˆλ„λ‘ 섀계해야 함을 μ˜λ―Έν•©λ‹ˆλ‹€ [6]. * **μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙 (ISP, Interface Segregation Principle)** ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μΈν„°νŽ˜μ΄μŠ€λ‚˜ 데이터에 μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€ [2]. Reactμ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈκ°€ μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λΆˆν•„μš”ν•œ propsλ₯Ό λ°›μ§€ μ•Šμ•„μ•Ό ν•˜λ©°, μ±…μž„μ„ λͺ…ν™•νžˆ λΆ„λ¦¬ν•˜μ—¬ 전달해야 ν•©λ‹ˆλ‹€ [6]. 예λ₯Ό λ“€μ–΄, 단지 `username` λ¬Έμžμ—΄ ν•˜λ‚˜λ§Œ ν•„μš”ν•œ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈμ— κ±°λŒ€ν•œ `user` 객체 전체λ₯Ό μ „λ‹¬ν•˜λ©΄ λΆˆν•„μš”ν•œ 결합이 λ°œμƒν•˜λ―€λ‘œ νŠΉμ • λ°μ΄ν„°λ§Œ λ„˜κ²¨μ£ΌλŠ” 것이 λ°”λžŒμ§ν•©λ‹ˆλ‹€ [2, 7]. * **μ˜μ‘΄μ„± μ—­μ „ 원칙 (DIP, Dependency Inversion Principle)** ꡬ체적인 κ΅¬ν˜„ ν΄λž˜μŠ€κ°€ μ•„λ‹Œ μΆ”μƒν™”λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€λŠ” μ›μΉ™μž…λ‹ˆλ‹€ [2, 9]. React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈκ°€ λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈμ— μ§μ ‘μ μœΌλ‘œ κ°•ν•˜κ²Œ μ˜μ‘΄ν•˜κ²Œ λ§Œλ“œλŠ” λŒ€μ‹ , propsλ₯Ό 톡해 μ˜μ‘΄μ„±μ„ μ£Όμž…(inject)ν•˜κ±°λ‚˜ Context API 같은 곡톡 좔상화λ₯Ό ν™œμš©ν•˜μ—¬ μ˜μ‘΄μ„±μ„ 관리해야 ν•©λ‹ˆλ‹€ [2, 6]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Clean Code]], [[DRY Principle]], [[KISS Principle]], [[YAGNI Principle]], [[Component Composition]], [[Custom Hooks]] - **Projects/Contexts:** [[Large-scale Application Architecture]], [[Refactoring Legacy React Codebases]] - **Contradictions/Notes:** μ†ŒμŠ€ 간에 λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙(LSP)의 React 적용 κ°€λŠ₯성에 λŒ€ν•œ μž‘μ€ 관점 차이가 μžˆμŠ΅λ‹ˆλ‹€. ν•œ μ†ŒμŠ€λŠ” μ„œλΈŒ μ»΄ν¬λ„ŒνŠΈκ°€ 베이슀 μ»΄ν¬λ„ŒνŠΈλ₯Ό μ›ν™œνžˆ λŒ€μ²΄ν•˜λŠ” λ°©μ‹μœΌλ‘œ LSPλ₯Ό μ μš©ν•  수 μžˆλ‹€κ³  μ„€λͺ…ν•˜μ§€λ§Œ [6], λ‹€λ₯Έ μ†ŒμŠ€λŠ” ν˜„λŒ€ Reactμ—μ„œ 클래슀 상속을 거의 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•¨μˆ˜ν˜• μ ‘κ·Ό 방식을 μ·¨ν•˜κΈ° λ•Œλ¬Έμ— 이 원칙이 μ‹€μ œλ‘œ μ μš©λ˜λŠ” κ²½μš°λŠ” λ“œλ¬Όλ‹€κ³  μ§€μ ν•©λ‹ˆλ‹€ [2]. --- *Last updated: 2026-04-26*