# [[Clean Code Principles]] ## ๐Ÿ“Œ Brief Summary Clean Code ์›์น™์€ ์ฝ”๋“œ๋ฅผ ์ฝ๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹๊ฒŒ, ๋ช…ํ™•ํ•˜๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง์˜ ํ•ต์‹ฌ ์ง€์นจ์ž…๋‹ˆ๋‹ค [1]. ํ”„๋ก ํŠธ์—”๋“œ ๋ฐ React ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์ด ์›์น™๋“ค์€ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋กœ์ง์„ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ์œ ์ง€ํ•˜์—ฌ ์žฅ๊ธฐ์ ์ธ ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [2, 3]. ๋Œ€ํ‘œ์ ์œผ๋กœ DRY, KISS, YAGNI ์›์น™ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ์›์น™๋“ค์„ ๊ท ํ˜• ์žˆ๊ฒŒ ์ ์šฉํ•˜์—ฌ ๋„ˆ๋ฌด ์ด๋ฅธ ์ตœ์ ํ™”๋‚˜ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ์˜ ์ฆ๊ฐ€๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [4, 5]. ## ๐Ÿ“– Core Content * **Clean Code์˜ ๊ธฐ๋ณธ ๊ฐœ๋…:** ์ฝ”๋“œ๋Š” ํ•ญ์ƒ ๋ช…ํ™•ํ•˜๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์—ฌ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค [1]. React ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ด๋ฆ„์„ ์ž˜ ์ง€์–ด์•ผ ํ•˜๋ฉฐ, ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋œ ๊ตฌ์กฐ๋ฅผ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [5]. ๋˜ํ•œ ํ•จ์ˆ˜์˜ ํฌ๊ธฐ๋Š” ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์ˆœํ™˜ ๋ณต์žก๋„(cyclometric complexity)๋ฅผ ๋‚ฎ์ถ”๋ฉฐ, ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ์„œ์ˆ ์ ์œผ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [6]. * **DRY (Don't Repeat Yourself):** ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ์ค‘๋ณต์„ ํ”ผํ•˜๋Š” ์›์น™์ž…๋‹ˆ๋‹ค [1]. React์—์„œ๋Š” ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…(Custom Hooks)์ด๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ(HOC)๋กœ ์ถ”์ถœํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [4, 5]. ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋•Œ ์—ฌ๋Ÿฌ ๊ณณ์„ ์ผ์ผ์ด ๋ณ€๊ฒฝํ•  ํ•„์š” ์—†์ด ํ•œ ๊ณณ์—์„œ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค [7]. * **KISS (Keep It Simple, Stupid):** ๋ณต์žก์„ฑ๋ณด๋‹ค ๋‹จ์ˆœ์„ฑ์„ ์ตœ์šฐ์„ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ž…๋‹ˆ๋‹ค [1]. ๊ธฐ๋Šฅ์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๋ฉด ๋” ์ž‘๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [7]. ๋„ˆ๋ฌด ์ด๋ฅธ ์ตœ์ ํ™”(premature optimization)๋ฅผ ํ”ผํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๋กœ์ง์„ ์ง๊ด€์ ์ด๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [5]. * **YAGNI (You Aren't Gonna Need It):** ์‹ค์ œ๋กœ ํ•„์š”ํ•ด์ง€๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ์›์น™์ž…๋‹ˆ๋‹ค [1]. ์• ์ž์ผ(Agile) ํ™˜๊ฒฝ์—์„œ ํŠนํžˆ ์ค‘์š”ํ•œ ์ด ์›์น™์€, ๋ฏธ๋ž˜์— ์‚ฌ์šฉ๋ ์ง€๋„ ๋ชจ๋ฅธ๋‹ค๋Š” ์ด์œ ๋กœ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค [8]. ๋ฏธ๋ฆฌ ๋งŒ๋“  ๊ธฐ๋Šฅ์€ ๊ฒฐ๊ตญ ์“ฐ์ด์ง€ ์•Š๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฉฐ, ์ด๋Š” ๊ฐœ๋ฐœ ์‹œ๊ฐ„ ๋‚ญ๋น„์™€ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•  ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ(dead code)์˜ ์ฆ๊ฐ€๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค [8, 9]. ๋”ฐ๋ผ์„œ ์ปดํฌ๋„ŒํŠธ๋Š” ์˜ค๋Š˜ ๋‹น์žฅ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๊ตฌํ˜„ํ•˜๊ณ  ํ™•์žฅ์€ ๋‚˜์ค‘์œผ๋กœ ๋ฏธ๋ค„์•ผ ํ•ฉ๋‹ˆ๋‹ค [5]. * **DRY์™€ KISS์˜ ๊ท ํ˜• ์œ ์ง€:** ์ค‘๋ณต์„ ํ”ผํ•˜๋Š” DRY ์›์น™์€ ์œ ์šฉํ•˜์ง€๋งŒ, ์ง€๋‚˜์น˜๊ฒŒ ๋‚จ์šฉํ•˜์—ฌ ๊ณผ๋„ํ•˜๊ฒŒ ์ถ”์ƒํ™”ํ•  ๊ฒฝ์šฐ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜์—ฌ ๋‹จ์ˆœ์„ฑ์„ ์ถ”๊ตฌํ•˜๋Š” KISS ์›์น™์„ ์œ„๋ฐ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [4]. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถ”์ƒํ™” ์ฝ”๋“œ๊ฐ€ ์›๋ž˜์˜ ์ค‘๋ณต ์ฝ”๋“œ๋ณด๋‹ค ์˜คํžˆ๋ ค ์ดํ•ดํ•˜๊ธฐ ๋” ์–ด๋ ต๋‹ค๋ฉด ์‹คํŒจํ•œ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค [3, 4]. ๋”ฐ๋ผ์„œ ๋™์ผํ•œ ํŒจํ„ด์ด ์ตœ์†Œ ์„ธ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์ถ”์ƒํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์กฐ๊ธฐ ์ตœ์ ํ™”๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ข‹์€ ์ง€์นจ์ž…๋‹ˆ๋‹ค [4]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[SOLID Principles]], [[Refactoring Techniques]], [[React Folder Structure]] - **Projects/Contexts:** [[Scalable Frontend Systems]], [[Agile Environments]] - **Contradictions/Notes:** DRY ์›์น™์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต์„ ์ค„์ด๋ ค๋Š” ์‹œ๋„๊ฐ€ ์˜คํžˆ๋ ค ๊ณผ๋„ํ•˜๊ณ  ๋ณต์žกํ•œ ์ถ”์ƒํ™”๋ฅผ ๋‚ณ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3, 4]. ๋”ฐ๋ผ์„œ DRY๋ฅผ ๋งน๋ชฉ์ ์œผ๋กœ ๋”ฐ๋ฅด๊ธฐ๋ณด๋‹ค๋Š” KISS ์›์น™๊ณผ ํ•จ๊ป˜ ๊ณ ๋ คํ•˜์—ฌ ๋‹จ์ˆœ์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. --- *Last updated: 2026-04-26*