# [[Clean Code]] ## ๐Ÿ“Œ Brief Summary ํด๋ฆฐ ์ฝ”๋“œ(Clean Code)๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋ˆ„๊ตฌ๋‚˜ ์ฝ๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ํŽธํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ๋ช…ํ™•ํ•˜๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค [1]. ํ”„๋ก ํŠธ์—”๋“œ ๋ฐ ๋ฆฌ์•กํŠธ(React) ์ƒํƒœ๊ณ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ๋•Œ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜์ ์ธ ๊ธฐ๋ฐ˜ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [2]. ์ด๋ฅผ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋œ ๊ตฌ์กฐ๋ฅผ ํ”ผํ•ด์•ผ ํ•˜๊ณ , ๋‹จ์ผ ํ”„๋กœ์ ํŠธ์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ๊ฐ€๋…์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [3]. ## ๐Ÿ“– Core Content * **ํด๋ฆฐ ์ฝ”๋“œ์˜ ๊ธฐ๋ณธ ์ ์šฉ ๋ฐฉ์‹:** * ํด๋ฆฐ ์ฝ”๋“œ๋Š” ๋ช…ํ™•์„ฑ๊ณผ ๋‹จ์ˆœ์„ฑ์„ ์ตœ์šฐ์„ ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค [1]. React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ๋ชฉ์ ์ด ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋‚˜๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋กœ์ง์ด ๊ณผ๋„ํ•˜๊ฒŒ ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค [3]. * **SOLID ์›์น™์„ ํ†ตํ•œ React ์ฝ”๋“œ์˜ ๊ตฌ์กฐํ™”:** * **SRP (๋‹จ์ผ ์ฑ…์ž„ ์›์น™):** ์ปดํฌ๋„ŒํŠธ๋‚˜ ํ›…์€ ์˜ค์ง ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ๋ชฉ์ ๋งŒ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค [4]. ๋งŒ์•ฝ ์ปดํฌ๋„ŒํŠธ๊ฐ€ 300์ค„์„ ๋„˜์–ด์„ ๋‹ค๋ฉด, ์ด๋Š” ์ƒํƒœ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ ํŽ˜์นญ, ๋ Œ๋”๋ง ๋“ฑ ๋„ˆ๋ฌด ๋งŽ์€ ์—ญํ• ์„ ์งŠ์–ด์ง€๊ณ  ์žˆ๋‹ค๋Š” ์‹ ํ˜ธ์ด๋ฏ€๋กœ ๋” ์ž‘๊ณ  ์ง‘์ค‘๋œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5]. * **OCP (๊ฐœ๋ฐฉ/ํ์‡„ ์›์น™):** ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ๋Œ€์‹ , ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ(composition)์ด๋‚˜ `children`, `render props` ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4, 6]. * **ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™):** ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” props์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค [6, 7]. ํฐ ๊ฐ์ฒด๋ฅผ ํ†ต์งธ๋กœ ์ „๋‹ฌํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋œ ํŠน์ • ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌํ•ด์•ผ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4, 6]. * **DIP (์˜์กด์„ฑ ์—ญ์ „ ์›์น™):** ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ์ง์ ‘์ ์œผ๋กœ ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ , props๋‚˜ context๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4, 7]. * **DRY, KISS, YAGNI ์›์น™๊ณผ ๊ท ํ˜•:** * **DRY (Don't Repeat Yourself):** ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํ”ผํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด, ๊ณตํ†ต ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ(HOC)๋กœ ์ถ”์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 3, 8, 9]. * **KISS (Keep It Simple, Stupid):** ๋ณต์žก์„ฑ๋ณด๋‹ค ๋‹จ์ˆœํ•จ์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1]. ๋””๋ฒ„๊น…๊ณผ ์ดํ•ด๊ฐ€ ์‰ฝ๋„๋ก ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฉฐ, ๋„ˆ๋ฌด ์ด๋ฅธ ์ตœ์ ํ™”๋ฅผ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [3, 9]. * **YAGNI (You Aren't Gonna Need It):** ๋ฏธ๋ž˜์— ๋ฐœ์ƒํ• ์ง€๋„ ๋ชจ๋ฅด๋Š” ์š”๊ตฌ์‚ฌํ•ญ์„ ์œ„ํ•ด ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌ์ถ•ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค [10, 11]. ํ˜„์žฌ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์˜ค๋Š˜ ํ•„์š”ํ•œ ๊ฒƒ๋“ค๋งŒ ๊ตฌํ˜„ํ•˜์—ฌ ์ถ”ํ›„์˜ ๋ฐ๋“œ ์ฝ”๋“œ ๋ฐœ์ƒ์„ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 3, 10]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[SOLID Principles]], [[React Architecture]], [[Refactoring]] - **Projects/Contexts:** [[Frontend Scalability]], [[Large-scale React Systems]] - **Contradictions/Notes:** ๋„ˆ๋ฌด ์ฒ ์ €ํ•˜๊ฒŒ DRY ์›์น™์„ ์ง€ํ‚ค๋ ค๋‹ค ๋ณด๋ฉด ๋ถˆํ•„์š”ํ•˜๊ณ  ๋ณต์žกํ•œ ์ถ”์ƒํ™”๋ฅผ ๋‚ณ๊ฒŒ ๋˜์–ด, ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ผ๋Š” KISS ์›์น™์„ ์œ„๋ฐ˜ํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ํŒจํ„ด์ด ์ตœ์†Œ 3๋ฒˆ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ถ”์ƒํ™”ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค [8, 12]. --- *Last updated: 2026-04-26*