--- id: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d category: "10_Wiki/Topics/Development" confidence_score: 0.99 tags: [engineering-principles, solid, dry, kiss, yagni, clean-code, software-engineering] last_reinforced: 2026-05-01 github_commit: "wikification-engineering-principles" --- # Engineering Principles (SOLID, DRY, KISS, YAGNI ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ์›์น™๋“ค์€ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ํ†ต์ œํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋ฉฐ, ํŠนํžˆ SOLID์™€ DRY/KISS/YAGNI๋Š” '๋‹จ์ˆœํ•จ'๊ณผ '์œ ์—ฐํ•จ' ์‚ฌ์ด์˜ ์ตœ์ ์˜ ๊ท ํ˜•์ ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ์ง€์นจ์ด๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) ### 1. SOLID ์›์น™ (Object-Oriented Design) - **SRP (๋‹จ์ผ ์ฑ…์ž„ ์›์น™)**: ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ/์ปดํฌ๋„ŒํŠธ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ์ฑ…์ž„(๋ณ€๊ฒฝ ์ด์œ )๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. React์—์„œ๋Š” ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ชผ๊ฐœ๋Š” ํ•ต์‹ฌ ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค. - **OCP (๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™)**: ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์„ ํ†ตํ•ด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•œ๋‹ค. - **LSP (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)**: ์ž์‹ ํด๋ž˜์Šค(๋˜๋Š” ์„œ๋ธŒ ์ปดํฌ๋„ŒํŠธ)๋Š” ๋ถ€๋ชจ์˜ ์—ญํ• ์„ ์˜จ์ „ํžˆ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. - **ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)**: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค(Props)์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์ž˜๊ฒŒ ์ชผ๊ฐ ๋‹ค. - **DIP (์˜์กด์„ฑ ์—ญ์ „ ์›์น™)**: ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค. ### 2. Pragmatic Principles (DRY, KISS, YAGNI) - **DRY (Don't Repeat Yourself)**: ์ง€์‹์˜ ์ค‘๋ณต์„ ํ”ผํ•œ๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์€ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ ์ถ”์ถœํ•œ๋‹ค. - **KISS (Keep It Simple, Stupid)**: ๋‹จ์ˆœํ•จ์ด ๊ถ๊ทน์˜ ์ •๊ตํ•จ์ด๋‹ค. ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋ณด๋‹ค ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์šฐ์„ ํ•œ๋‹ค. - **YAGNI (You Aren't Gonna Need It)**: ์‹ค์ œ๋กœ ํ•„์š”ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•œ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์„ ๊ฒฝ๊ณ„ํ•œ๋‹ค. ### 3. Clean Code ์‹ค๋ฌด - **๊ฐ€๋…์„ฑ ์šฐ์„ **: ์ฝ”๋“œ๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ๊ธฐ ์œ„ํ•จ์ด ์•„๋‹ˆ๋ผ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ๋‹ค. ๋ช…ํ™•ํ•œ ๋ณ€์ˆ˜๋ช…๊ณผ ํ•จ์ˆ˜ ํฌ๊ธฐ ์กฐ์ ˆ์ด ํ•„์ˆ˜์ ์ด๋‹ค. - **๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ**: ์›์น™์„ ์ค€์ˆ˜ํ•œ ์ฝ”๋“œ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด(Testable) ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **DRY vs KISS**: ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฌด๋ฆฌํ•œ ์ถ”์ƒํ™”๋Š” ์ฝ”๋“œ๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค. '์„ธ ๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ(Rule of Three)'๊ฐ€ ์ข‹์€ ์ ˆ์ถฉ์•ˆ์ด๋‹ค. - **YAGNI vs ํ™•์žฅ์„ฑ**: ๋ฏธ๋ž˜๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅด๋‹ค. YAGNI๋Š” '๊ธฐ๋Šฅ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๊ณ , SOLID๋Š” '๊ตฌ์กฐ'์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Parent**: 10_Wiki/Topics/Development - **Related**: Legacy React Migration & Refactoring Standard, Custom Hooks, [[Feature-Sliced Design|Feature-Sliced Design]] - **Raw Source**: 00_Raw/DRY, 00_Raw/KISS, 00_Raw/YAGNI, 00_Raw/Single Responsibility Principle, 00_Raw/Clean Code and SOLID Principles ## ๐Ÿ’ป GitHub ๋™๊ธฐํ™” ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ 1. Stage: git add . 2. Commit: `git commit -m "[P-Reinforce] Wikify Core Engineering Principles (SOLID, DRY, KISS, YAGNI)"` 3. Push: `git push origin main`