--- id: P-REINFORCE-AUTO-WIKI-ARCH-001 category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" confidence_score: 0.95 tags: [architecture, ooad, solid-principles, maintainability, code-review, p-reinforce] last_reinforced: 2026-05-01 --- # [[SOLID Principles|SOLID Principles]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > "์†Œํ”„ํŠธ์›จ์–ด์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ 5๊ฐ€์ง€ ํ•ต์‹ฌ ์„ค๊ณ„ ๊ธฐ๋‘ฅ: ์ธ์ง€์  ๋ถ€ํ•˜๋ฅผ ๋‚ฎ์ถ”๊ณ , ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๋ฉฐ, ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์€ ๊ฐ•๊ฑดํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ‘œ์ค€ ์ง€์นจ." ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) SOLID ์›์น™์€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์™€ ์‹œ์Šคํ…œ ์„ค๊ณ„์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. 1. **[[Single Responsibility Principle (SRP)|Single Responsibility Principle (SRP]]**: ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์ด์œ ๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ๊ฐ€๋…์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. 2. **Open-Closed Principle (OCP)**: ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค. 3. **Liskov Substitution Principle (LSP)**: ํ•˜์œ„ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ์ƒ์œ„ ํƒ€์ž…์œผ๋กœ ๊ต์ฒด ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์† ๊ตฌ์กฐ์—์„œ์˜ ํ–‰๋™ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. 4. **Interface Segregation Principle (ISP)**: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กดํ•˜๋„๋ก ๊ฐ•์š”ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๊ฑฐ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ๊ตฌ์ฒด์ ์ด๊ณ  ์ž‘์€ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋‚ซ์Šต๋‹ˆ๋‹ค. 5. **[[แ„‹แ…ดแ„Œแ…ฉแ†ซแ„‰แ…ฅแ†ผ แ„‹แ…งแ†จแ„Œแ…ฅแ†ซ แ„‹แ…ฏแ†ซแ„Žแ…ตแ†จ (Dependency Inversion Principle DIP)|Dependency Inversion Principle (DIP]]**: ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋‘˜ ๋‹ค ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **์ถ”์ƒํ™”์˜ ๋น„์šฉ**: ํ™•์žฅ์„ฑ์„ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒํ™”๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ๋„์ž…ํ•  ๊ฒฝ์šฐ, ์ฝ”๋“œ์˜ ์ง๊ด€์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง(Over-engineering)์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๋ฏธ๋ž˜์˜ ์œ ์—ฐ์„ฑ ์‚ฌ์ด์˜ ์‹ค์šฉ์  ํƒ€ํ˜‘(Trade-off)์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. - **์‹คํ–‰ ํ๋ฆ„ ํŒŒ์•…์˜ ์–ด๋ ค์›€**: DI(์˜์กด์„ฑ ์ฃผ์ž…)๋ฅผ ๊ทนํ•œ์œผ๋กœ ํ™œ์šฉํ•  ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„์— ์˜์กด์„ฑ์ด ๊ฒฐ์ •๋˜๋ฏ€๋กœ, ์ฝ”๋“œ ์ •์  ๋ถ„์„๋งŒ์œผ๋กœ๋Š” ์ „์ฒด ์‹คํ–‰ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…ํ™•ํ•œ ๋ฌธ์„œํ™”์™€ ์ถ”์  ๋กœ์ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - [[Single Responsibility Principle (SRP)|Single Responsibility Principle (SRP]]: ์ฒซ ๋ฒˆ์งธ ์›์น™์˜ ์‹ฌํ™”. - [[Dependency Injection (DI)|Dependency Injection (DI]]: DIP๋ฅผ ์‹คํ˜„ํ•˜๋Š” ๊ตฌ์ฒด์  ๊ธฐ๋ฒ•. - [[Clean Architecture|Clean Architecture]]: SOLID๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋กœ ํ™•์žฅํ•œ ๊ตฌ์กฐ. - Abstraction & Over-engineering: ์„ค๊ณ„ ์‹œ ๊ฒฝ๊ณ„ํ•ด์•ผ ํ•  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„. - Test-Driven Development (TDD: ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ์›์น™์œผ๋กœ์„œ์˜ ์—ฐ๊ฒฐ. ---