--- id: wiki-2026-0508-solid-principles title: SOLID Principles category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [P-REINFORCE-AUTO-WIKI-ARCH-001] duplicate_of: none source_trust_level: A confidence_score: 0.95 tags: [architecture, ooad, solid-principles, maintainability, code-review, p-reinforce] raw_sources: [] last_reinforced: 2026-05-01 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[SOLID Principles]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > "์†Œํ”„ํŠธ์›จ์–ด์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ 5๊ฐ€์ง€ ํ•ต์‹ฌ ์„ค๊ณ„ ๊ธฐ๋‘ฅ: ์ธ์ง€์  ๋ถ€ํ•˜๋ฅผ ๋‚ฎ์ถ”๊ณ , ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๋ฉฐ, ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์€ ๊ฐ•๊ฑดํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ‘œ์ค€ ์ง€์นจ." ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) SOLID ์›์น™์€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ์‹œ์Šคํ…œ ์„ค๊ณ„์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. 1. **[[Single Responsibility Principle (SRP)]]**: ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์ด์œ ๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ๊ฐ€๋…์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. 2. **Open-Closed Principle (OCP)**: ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค. 3. **Liskov Substitution Principle (LSP)**: ํ•˜์œ„ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ์ƒ์œ„ ํƒ€์ž…์œผ๋กœ ๊ต์ฒด ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์† ๊ตฌ์กฐ์—์„œ์˜ ํ–‰๋™ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. 4. **Interface Segregation Principle (ISP)**: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กดํ•˜๋„๋ก ๊ฐ•์š”ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ฑฐ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ๊ตฌ์ฒด์ ์ด๊ณ  ์ž‘์€ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋‚ซ์Šต๋‹ˆ๋‹ค. 5. **[[Dependency Inversion Principle (DIP)]]**: ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋‘˜ ๋‹ค ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & Updates) - **์ถ”์ƒํ™”์˜ ๋น„์šฉ**: ํ™•์žฅ์„ฑ์„ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํ™”๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ๋„์ž…ํ•  ๊ฒฝ์šฐ, ์ฝ”๋“œ์˜ ์ง๊ด€์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๋ฏธ๋ž˜์˜ ์œ ์—ฐ์„ฑ ์‚ฌ์ด์˜ ์‹ค์šฉ์  ํƒ€ํ˜‘(Trade-off)์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. - **์‹คํ–‰ ํ๋ฆ„ ํŒŒ์•…์˜ ์–ด๋ ค์›€**: DI(์˜์กด์„ฑ ์ฃผ์ž…)๋ฅผ ๊ทนํ•œ์œผ๋กœ ํ™œ์šฉํ•  ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„์— ์˜์กด์„ฑ์ด ๊ฒฐ์ •๋˜๋ฏ€๋กœ, ์ฝ”๋“œ ์ •์  ๋ถ„์„๋งŒ์œผ๋กœ๋Š” ์ „์ฒด ์‹คํ–‰ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…ํ™•ํ•œ ๋ฌธ์„œํ™”์™€ ์ถ”์  ๋กœ์ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - [[Single Responsibility Principle (SRP)]]: ์ฒซ ๋ฒˆ์งธ ์›์น™์˜ ์‹ฌํ™”. - [[Dependency Injection (DI)]]: DIP๋ฅผ ์‹คํ˜„ํ•˜๋Š” ๊ตฌ์ฒด์  ๊ธฐ๋ฒ•. - [[Clean Architecture]]: SOLID๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋กœ ํ™•์žฅํ•œ ๊ตฌ์กฐ. - [[Abstraction & Over-engineering]]: ์„ค๊ณ„ ์‹œ ๊ฒฝ๊ณ„ํ•ด์•ผ ํ•  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„. - [[Test-Driven Development (TDD)]]: ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ์›์น™์œผ๋กœ์„œ์˜ ์—ฐ๊ฒฐ. --- ## ๐Ÿค– LLM ํ™œ์šฉ ํžŒํŠธ (How to Use This Knowledge) **์–ธ์ œ ์ด ์ง€์‹์„ ์“ฐ๋Š”๊ฐ€:** - *(TODO)* **์–ธ์ œ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€:** - *(TODO)* ## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) - **์ •๋ณด ์ƒํƒœ:** needs_review - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A - **๊ฒ€ํ†  ์ด์œ :** *(P-Reinforce Phase 1 ์ž๋™ ์ •๊ทœํ™”. ๋ณธ๋ฌธ ๊ฒ€์ฆ ํ•„์š”.)* ## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) - **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** *(TODO: ์ธ๋ฑ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌํฌํŠธ ์ฐธ์กฐ)* - **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE (์ž๋™ ์ •๊ทœํ™”) - **์ฒ˜๋ฆฌ ์ด์œ :** Phase 1 ์ •๊ทœํ™” โ€” ์˜› ํ…œํ”Œ๋ฆฟ/๋ˆ„๋ฝ ํ•„๋“œ ๋ณด๊ฐ•. ## ๐Ÿ•“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Changelog) | ๋‚ ์งœ | ๋ณ€๊ฒฝ ๋‚ด์šฉ | ์ฒ˜๋ฆฌ ๋ฐฉ์‹ | ์‹ ๋ขฐ๋„ | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 ์ •๊ทœํ™” (frontmatter + ํ—ค๋” ํ‘œ์ค€ํ™”) | UPDATE | A | ## ๐Ÿ’ป ์ฝ”๋“œ ํŒจํ„ด (Code Patterns) **ํŒจํ„ด 1:** *(TODO: ์ด ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜ ๋ฐ˜์˜ํ•œ ๊ตฌ์กฐ ์Šค์ผˆ๋ ˆํ†ค)* ```text # TODO ``` ## ๐Ÿค” ์˜์‚ฌ๊ฒฐ์ • ๊ธฐ์ค€ (Decision Criteria) **์„ ํƒ A๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **์„ ํƒ B๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **๊ธฐ๋ณธ๊ฐ’:** > *(TODO)* ## โŒ ์•ˆํ‹ฐํŒจํ„ด (Anti-Patterns) - **[์•ˆํ‹ฐํŒจํ„ด]:** *(TODO: ๋ฌด์—‡์„ ํ•˜๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€ + ์ด์œ  + ๋Œ€์‹  ๋ฌด์—‡์„)*