## ๐Ÿ“Œ Brief Summary Software Engineering Principles(์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™)๋Š” ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•˜๊ณ  ํ™•์žฅ ์šฉ์ดํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์„ค๊ณ„ ์ง€์นจ์ด๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๋ฐ React ์ƒํƒœ๊ณ„์—์„œ๋Š” **SOLID**, **Clean Code**, **DRY**, **KISS**, **YAGNI** ์›์น™์„ ํ†ตํ•ด ์ฝ”๋“œ ๋ณต์žก์„ฑ์„ ์ œ์–ดํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ UI์˜ ๋ช…ํ™•ํ•œ ๋ถ„๋ฆฌ๋ฅผ ๋‹ฌ์„ฑํ•œ๋‹ค. ## ๐Ÿ“– Core Content 1. **SOLID Principles** - **SRP (๋‹จ์ผ ์ฑ…์ž„)**: ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ/๋ชจ๋“ˆ์€ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ–๋Š”๋‹ค (300์ค„ ๋ฃฐ ๋“ฑ). - **OCP (๊ฐœ๋ฐฉ-ํ์‡„)**: ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ ๋“ฑ์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•œ๋‹ค. - **ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ)**: ํ•„์š”ํ•œ ์†์„ฑ(Props)๋งŒ ์ „๋‹ฌํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•œ๋‹ค. - **DIP (์˜์กด์„ฑ ์—ญ์ „)**: ๊ตฌ์ฒด์  ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”(Props, Context)์— ์˜์กดํ•œ๋‹ค. 2. **Clean Code** - ๋ช…ํ™•ํ•œ ๋„ค์ด๋ฐ, ๋‚ฎ์€ ์ค‘์ฒฉ ๊ตฌ์กฐ, ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ•จ์ˆ˜ ์ž‘์„ฑ์„ ํ†ตํ•ด ๊ฐ€๋…์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. 3. **ํšจ์œจ์  ๊ฐœ๋ฐœ ์›์น™ (DRY, KISS, YAGNI)** - **DRY**: ์ปค์Šคํ…€ ํ›… ๋“ฑ์œผ๋กœ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๋˜ ๊ณผ๋„ํ•œ ์ถ”์ƒํ™”๋Š” ๊ฒฝ๊ณ„ํ•œ๋‹ค. - **KISS**: ๋‹จ์ˆœํ•จ์„ ์œ ์ง€ํ•˜์—ฌ ๋””๋ฒ„๊น… ์šฉ์ด์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. - **YAGNI**: ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ(๋ฏธ๋ž˜ ์˜ˆ์ธก)์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค. 4. **์•„ํ‚คํ…์ฒ˜์  ์ ์šฉ (FSD)** - ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™์„ ํด๋” ๊ตฌ์กฐ์™€ ์˜์กด์„ฑ ๊ทœ์น™์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„ ์บก์Аํ™”๋ฅผ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค. ## โš–๏ธ Trade-offs & Caveats - **DRY vs KISS**: ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ๋ณต์žกํ•œ ์ถ”์ƒํ™”๊ฐ€ ์˜คํžˆ๋ ค ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, 'Rule of Three'(3๋ฒˆ ๋ฐ˜๋ณต ์‹œ ์ถ”์ถœ)๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค. - **YAGNI vs ํ™•์žฅ์„ฑ**: ๋ฏธ๋ž˜๋ฅผ ๋Œ€๋น„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ž์นซ ์•„ํ‚คํ…์ฒ˜์˜ ์œ ์—ฐ์„ฑ์„ ๋–จ์–ด๋œจ๋ ค ๋‚˜์ค‘์— ๋” ํฐ ์ˆ˜์ • ๋น„์šฉ์„ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ์ ˆํ•œ ๋ฐธ๋Ÿฐ์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค. - **์ถ”์ƒํ™”์˜ ๋น„์šฉ**: ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ์™€ ์˜์กด์„ฑ ์—ญ์ „์„ ์ฒ ์ €ํžˆ ์ง€ํ‚ค๋ ค๋‹ค ๋ณด๋ฉด ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค. ## ๐Ÿ”— Knowledge Connections ### Related Concepts (Auto-Linked) * [[Design_Patterns]] * [[Engineering_Principles]] * [[Feature-Sliced_Design]] * [[Frontend]] * [[Principles]] * [[React]] * [[Refactoring]] * [[Refactoring Techniques]] * [[Research]] * [[Rule of Three]] * [[SOLID_Principles]] ### Related Concepts - **SOLID**: ์„ธ๋ถ€ ์„ค๊ณ„ ์›์น™์˜ ์ง‘ํ•ฉ (๊ด€๊ณ„: ์ƒ์œ„ ์›์น™) - **Clean Code**: ๊ถ๊ทน์ ์ธ ์ฝ”๋“œ ์ƒํƒœ (๊ด€๊ณ„: ํ’ˆ์งˆ ๋ชฉํ‘œ) - **Feature-Sliced Design (FSD)**: ์›์น™์˜ ๋ฌผ๋ฆฌ์  ๊ตฌํ˜„ (๊ด€๊ณ„: ๊ตฌ์กฐ์  ๋ฐฉ๋ฒ•๋ก ) ### Deeper Research Questions 1. ํ•จ์ˆ˜ํ˜• React ํ™˜๊ฒฝ์—์„œ ์ƒ์†์ด ์—†๋Š” LSP(๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜)์™€ DIP(์˜์กด์„ฑ ์—ญ์ „)์˜ ์‹ค์งˆ์ ์ธ ๊ตฌํ˜„ ํŒจํ„ด์€? 2. '์ถ”์ƒํ™”์˜ ๋น„์šฉ'์ด ์‹ค์ œ ํ”„๋กœ์ ํŠธ์˜ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ(TCO)์„ ์•ž์ง€๋ฅด๋Š” ์ž„๊ณ„์ ์€ ์–ด๋–ป๊ฒŒ ํŒ๋‹จํ•˜๋Š”๊ฐ€? 3. ์• ์ž์ผ ํ™˜๊ฒฝ์—์„œ YAGNI ์›์น™์„ ์ง€ํ‚ค๋ฉด์„œ๋„ '๊ธฐ์ˆ ์  ๋Ÿฐ์›จ์ด(Architectural Runway)'๋ฅผ ํ™•๋ณดํ•˜๋Š” ๋ฐฉ๋ฒ•์€? 4. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(ISP)์„ ์œ„๋ฐ˜ํ•˜์—ฌ ๊ฑฐ๋Œ€ ๊ฐ์ฒด๋ฅผ Props๋กœ ๋„˜๊ธธ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฆฌ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ €ํ•˜์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€? 5. Clean Code ์›์น™์„ ํŒ€์›๋“ค ์‚ฌ์ด์—์„œ ๋™๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋™ํ™”๋œ '์ฝ”๋“œ ์Šค๋ฉœ' ํƒ์ง€ ๋„๊ตฌ ํ™œ์šฉ ๋ฐฉ์•ˆ์€? ### Practical Application Contexts - **์‹ ๊ทœ ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค๊ณ„**: ์•„ํ‚คํ…์ฒ˜ ์›์น™ ์ˆ˜๋ฆฝ ๋ฐ ์ฝ”๋“œ ์ปจ๋ฒค์…˜ ๊ฐ•์ œ๋ฅผ ํ†ตํ•œ ํ’ˆ์งˆ ๊ธฐ๋ฐ˜ ๋งˆ๋ จ. - **๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง**: ๋ƒ„์ƒˆ๋‚˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™์— ๋”ฐ๋ผ ๊ตฌ์กฐํ™” ๋ฐ ๋ถ„ํ•ด. ### Adjacent Topics - **Design Patterns in Frontend** - **Refactoring Techniques** - **Test Driven Development (TDD)**