# [[SOLID Principles]] ## ๐Ÿ“Œ Brief Summary SOLID ์›์น™์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ณ  ์ฒด๊ณ„์ ์ด๋ฉฐ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๋„๋ก ๋•๋Š” 5๊ฐ€์ง€ ํ•ต์‹ฌ ์„ค๊ณ„ ์›์น™์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค[1]. ๋ณธ๋ž˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์„ ์œ„ํ•ด ๊ณ ์•ˆ๋˜์—ˆ์œผ๋‚˜, ํ˜„๋Œ€์˜ ํ•จ์ˆ˜ํ˜• React ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋„ ์œ ์—ฐํ•˜๊ฒŒ ํ•ด์„๋˜์–ด ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค[2]. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋กœ์ง์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์—ฌ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์  ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค[3, 4]. ## ๐Ÿ“– Core Content * **๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (SRP - Single Responsibility Principle):** * ์ปดํฌ๋„ŒํŠธ, ํ›…, ๋ชจ๋“ˆ์€ ์˜ค์ง ํ•˜๋‚˜์˜ ์—ญํ• ๊ณผ ๋ณ€๊ฒฝ ์ด์œ ๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค[2, 5, 6]. * ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ์›์น™์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค[5]. ๋งŒ์•ฝ ์ปดํฌ๋„ŒํŠธ๊ฐ€ 300์ค„์„ ๋„˜๋Š”๋‹ค๋ฉด ์ƒํƒœ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ ํŽ˜์นญ, ๋ Œ๋”๋ง ๋“ฑ ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค[5]. * ๊ฑฐ๋Œ€ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋” ์ž‘๊ณ  ๋ช…ํ™•ํ•œ ์ปดํฌ๋„ŒํŠธ(์˜ˆ: `UserDashboard`๋ฅผ `UserProfile`, `UserPosts` ๋“ฑ์œผ๋กœ ๋ถ„ํ• )๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ด ์›์น™์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[2, 5]. * **๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (OCP - Open/Closed Principle):** * ์†Œํ”„ํŠธ์›จ์–ด๋Š” ํ™•์žฅ์„ ์œ„ํ•ด์„œ๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๊ณ , ์ˆ˜์ •์„ ์œ„ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค[2, 7]. * React์—์„œ๋Š” ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋Œ€์‹ , ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ(Composition)์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ `children` ๋ฐ render props ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค[2, 6, 8]. * **๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (LSP - Liskov Substitution Principle):** * ์ž์‹ ํด๋ž˜์Šค๋Š” ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ž…๋‹ˆ๋‹ค[7]. * React ๊ด€์ ์—์„œ๋Š” ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งค๋„๋Ÿฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค[6]. ๋‹ค๋งŒ, ์ƒ์†๋ณด๋‹ค๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ˜„๋Œ€ React์—์„œ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋‚ฎ์Šต๋‹ˆ๋‹ค[2]. * **์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (ISP - Interface Segregation Principle):** * ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” props์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค[2, 8]. * ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹จ์ง€ 'username' ์†์„ฑ๋งŒ ํ•„์š”ํ•œ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ์— ๊ฑฐ๋Œ€ํ•œ 'user' ๊ฐ์ฒด ์ „์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๊ฒฐํ•ฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค[8]. ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋Š” TypeScript ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค[2, 6]. * **์˜์กด์„ฑ ์—ญ์ „ ์›์น™ (DIP - Dependency Inversion Principle):** * ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด๊ฐ€ ์•„๋‹Œ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค[2, 9]. * React์—์„œ๋Š” ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ์ง์ ‘์ ์œผ๋กœ ์˜์กดํ•˜๊ธฐ๋ณด๋‹ค, props๋‚˜ Context API๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด ์›์น™์„ ์ ์šฉํ•˜์—ฌ ์œ ์—ฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค[2, 6]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Clean Code]], [[DRY]], [[KISS]], [[YAGNI]], [[React Architecture]], [[Component Composition]] - **Projects/Contexts:** [[Large-scale React Applications]], [[Functional Programming in React]], [[Refactoring]] - **Contradictions/Notes:** ์†Œ์Šค [6]์—์„œ๋Š” ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ LSP๋ฅผ ์„ค๋ช…ํ•˜๋ฉฐ React์—์„œ์˜ ์ ์šฉ๋ฒ•์„ ์ œ์‹œํ•˜์ง€๋งŒ, ์†Œ์Šค [2]์—์„œ๋Š” ํ˜„๋Œ€์˜ ํ•จ์ˆ˜ํ˜• React ์ฝ”๋“œ์—์„œ๋Š” ํด๋ž˜์Šค ์ƒ์†์ด ๊ฑฐ์˜ ์“ฐ์ด์ง€ ์•Š์•„ LSP์˜ ์‹ค์งˆ์ ์ธ ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ๋‹ค๊ณ  ์ง€์ ํ•ฉ๋‹ˆ๋‹ค. --- *Last updated: 2026-04-26*