--- id: P-REINFORCE-AUTO-D3B79D category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - SOLID 원칙 (SOLID Principles)" --- # [[SOLID 원칙 (SOLID Principles)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) **SOLID의 5κ°€μ§€ 핡심 원칙** μ†ŒμŠ€ 데이터에 λ”°λ₯΄λ©΄ SOLIDλŠ” λ‹€μŒ λ‹€μ„― κ°€μ§€ μ›μΉ™μ˜ μ•½μžμž…λ‹ˆλ‹€ [1]. * **단일 μ±…μž„ 원칙 (Single Responsibility Principle, SRP):** ν΄λž˜μŠ€λŠ” 단 ν•˜λ‚˜μ˜ λ³€κ²½ 이유만 κ°€μ Έμ•Ό ν•˜λ©°, 였직 ν•˜λ‚˜μ˜ μž‘μ—…(μ±…μž„)만 μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€ [4]. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μž 데이터λ₯Ό μ €μž₯ν•˜κ³  μ‘°νšŒν•˜λŠ” ν΄λž˜μŠ€κ°€ μ‚¬μš©μž μž…λ ₯ 검증 κΈ°λŠ₯κΉŒμ§€ λ‹΄λ‹Ήν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€ [4]. μ΄λŠ” κ΄€μ‹¬μ‚¬μ˜ 뢄리(SoC) 원칙을 κ·Ήλ‹¨μ μœΌλ‘œ μ μš©ν•œ ν˜•νƒœλ‘œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€ [5]. * **개방/폐쇄 원칙 (Open/Closed Principle, OCP):** μ†Œν”„νŠΈμ›¨μ–΄ μ—”ν‹°ν‹°λŠ” ν™•μž₯을 μœ„ν•΄μ„œλŠ” μ—΄λ € μžˆμ–΄μ•Ό ν•˜μ§€λ§Œ, μˆ˜μ •μ„ μœ„ν•΄μ„œλŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€ [4, 6]. μΈν„°νŽ˜μ΄μŠ€λ‚˜ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬, κΈ°μ‘΄ μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³ λ„ μƒˆλ‘œμš΄ ν•˜μœ„ 클래슀λ₯Ό 톡해 κΈ°λŠ₯을 μΆ”κ°€ν•  수 있게 ν•¨μœΌλ‘œμ¨ 달성할 수 μžˆμŠ΅λ‹ˆλ‹€ [4]. * **λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 (Liskov Substitution Principle, LSP):** ν•˜μœ„ νƒ€μž…(Subtype)은 ν”„λ‘œκ·Έλž¨μ˜ 정확성을 ν›Όμ†ν•˜μ§€ μ•ŠμœΌλ©΄μ„œλ„ κΈ°λ³Έ νƒ€μž…(Base type)으둜 μ™„λ²½ν•˜κ²Œ λŒ€μ²΄λ  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€ [4]. * **μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙 (Interface Segregation Principle, ISP):** ν΄λΌμ΄μ–ΈνŠΈκ°€ μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜λ„λ‘ κ°•μš”λ°›μ•„μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€ [4]. ν•˜λ‚˜μ˜ 크고 λ²”μš©μ μΈ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€κΈ°λ³΄λ‹€λŠ”, 더 μž‘κ³  ꡬ체적인 μ—¬λŸ¬ 개의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 생성해야 ν•©λ‹ˆλ‹€ [4]. * **μ˜μ‘΄μ„± μ—­μ „ 원칙 (Dependency Inversion Principle, DIP):** κ³ μˆ˜μ€€ λͺ¨λ“ˆμ€ μ €μˆ˜μ€€ λͺ¨λ“ˆμ— μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ 되며, 두 λͺ¨λ“ˆ λͺ¨λ‘ 좔상화(예: μΈν„°νŽ˜μ΄μŠ€)에 μ˜μ‘΄ν•΄μ•Ό ν•©λ‹ˆλ‹€ [4, 7]. μ΄λŠ” 주둜 μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection)을 μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„λ©λ‹ˆλ‹€ [4]. **κ΅¬ν˜„μ„ μœ„ν•œ μ‹€μš©μ μΈ μ‘°μ–Έ** * **SRPλΆ€ν„° μ μš©ν•˜κΈ°:** 단일 μ±…μž„ 원칙은 μ μš©ν•˜κΈ° κ°€μž₯ μ‰¬μš°λ©° 즉각적인 이점을 μ œκ³΅ν•©λ‹ˆλ‹€. 클래슀λ₯Ό μž‘μ„±ν•˜κΈ° 전에 "이 클래슀의 단일 μ±…μž„μ€ 무엇인가?"라고 슀슀둜 μ§ˆλ¬Έν•΄μ•Ό ν•©λ‹ˆλ‹€ [3, 8]. * **κ΅¬ν˜„ μ „ μΈν„°νŽ˜μ΄μŠ€ 섀계:** μ»΄ν¬λ„ŒνŠΈκ°€ 'μ–΄λ–»κ²Œ' λ™μž‘ν• μ§€λ₯Ό κ΅¬ν˜„ν•˜κΈ° 전에, '무엇을' ν•΄μ•Ό ν•˜λŠ”μ§€(μΈν„°νŽ˜μ΄μŠ€)λ₯Ό λ¨Όμ € μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€ [8]. 이 방식은 μžμ—°μŠ€λŸ½κ²Œ OCP와 DIP 원칙을 μ§€μ›ν•©λ‹ˆλ‹€ [8]. * **μ˜μ‘΄μ„± μ£Όμž…(DI) ν”„λ ˆμž„μ›Œν¬ ν™œμš©:** Spring(Java)μ΄λ‚˜ ASP.NET Core와 같이 λ‚΄μž₯된 DI μ»¨ν…Œμ΄λ„ˆλ₯Ό μ œκ³΅ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ 결합을 λΆ„λ¦¬ν•˜κ³  DIPλ₯Ό 훨씬 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [8]. * **점진적 λ„μž…:** 기쑴의 λ ˆκ±°μ‹œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν•œ λ²ˆμ— λͺ¨λ‘ λ¦¬νŒ©ν† λ§ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜ κΈ°μ‘΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•  λ•Œ SOLID 원칙을 μ μ§„μ μœΌλ‘œ μ μš©ν•˜μ—¬ μ½”λ“œλ² μ΄μŠ€μ˜ μƒνƒœλ₯Ό κ°œμ„ ν•΄ λ‚˜κ°€λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ [8]. **적용 μ‹œμ˜ λ³΅μž‘λ„ 및 μš”κ΅¬μ‚¬ν•­** * SOLID 원칙을 κ΅¬ν˜„ν•˜λŠ” 것은 섀계 규율과 νŒ¨ν„΄μ„ μš”κ΅¬ν•˜λ―€λ‘œ μ€‘κ°„μ—μ„œ λ†’μŒ(Medium–High) μˆ˜μ€€μ˜ λ³΅μž‘λ„λ₯Ό κ°€μ§‘λ‹ˆλ‹€ [3]. * 이λ₯Ό μ›ν™œν•˜κ²Œ μ μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μˆ™λ ¨λœ κ°œλ°œμžμ™€ μ˜μ‘΄μ„± μ£Όμž…(DI) ν”„λ ˆμž„μ›Œν¬ λ“±μ˜ λ¦¬μ†ŒμŠ€κ°€ λ’·λ°›μΉ¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [3]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° (OOP)]], [[κ΄€μ‹¬μ‚¬μ˜ 뢄리 (Separation of Concerns)]], [[μ˜μ‘΄μ„± μ£Όμž… (Dependency Injection)]] - **Projects/Contexts:** [[μ—”ν„°ν”„λΌμ΄μ¦ˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 점진적 λ¦¬νŒ©ν† λ§]], [[라이브러리 및 ν™•μž₯ κ°€λŠ₯ν•œ μ½”λ“œλ² μ΄μŠ€]] - **Contradictions/Notes:** μ†ŒμŠ€ λ‚΄μ—μ„œ μƒμΆ©ν•˜λŠ” μ£Όμž₯은 λ°œκ²¬λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, 단일 μ±…μž„ 원칙(SRP)은 μ‹œμŠ€ν…œμ„ 고차원적인 μˆ˜μ€€μ—μ„œ λΆ„λ¦¬ν•˜λŠ” 'κ΄€μ‹¬μ‚¬μ˜ 뢄리(SoC)' 원칙과 μ’…μ’… λΉ„κ΅λ˜λ©°, SRPλŠ” ν΄λž˜μŠ€λ‚˜ λͺ¨λ“ˆμ˜ 'μ±…μž„'μ΄λΌλŠ” 더 λ―Έμ‹œμ μΈ μˆ˜μ€€μ„ λ‹€λ£¨λŠ” κ²ƒμœΌλ‘œ μ„€λͺ…λ©λ‹ˆλ‹€ [9]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/SOLID 원칙 (SOLID Principles).md]] ---