# [[Clean Code (ํด๋ฆฐ ์ฝ”๋“œ)]] ## ๐Ÿ“Œ Brief Summary ํด๋ฆฐ ์ฝ”๋“œ(Clean Code)๋Š” ์ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ, ๊ตฌ์กฐ๊ฐ€ ์ž˜ ์žกํ˜€ ์žˆ๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ์ž‘์„ฑ๋œ ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1]. ์ด๋Š” ๋‹จ์ˆœํžˆ ์ปดํ“จํ„ฐ์—๊ฒŒ ์ž‘์—…์„ ์ง€์‹œํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์‹œ์Šคํ…œ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ†ต ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค [2]. ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ๋ณต์žกํ•œ ์ฝ”๋“œ(Dirty Code)๋ฅผ ํด๋ฆฐ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ค„์ด๊ณ  ๋ฒ„๊ทธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ๋‚ฎ์ถ”๋ฉฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๊ฒฝ์ œ์„ฑ๊ณผ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๋ชฉ์ ์ž…๋‹ˆ๋‹ค [1, 3, 4]. ## ๐Ÿ“– Core Content * **ํด๋ฆฐ ์ฝ”๋“œ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฐ ์ธ์ง€์  ๊ฐ€์น˜** ํด๋ฆฐ ์ฝ”๋“œ๋Š” ์ธ๊ฐ„์˜ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์ฃผ์–ด ๋ฒ„๊ทธ๋ฅผ ๋” ๋นจ๋ฆฌ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ถ„์„ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ต๋‹ˆ๋‹ค [4]. ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์žฅ๊ธฐ์ ์œผ๋กœ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๊ฐ€์†ํ™”ํ•˜๋ฉฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ€์น˜๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํ† ๋Œ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค [4]. ๋ฐ˜๋ฉด ์ง€์ €๋ถ„ํ•œ ์ฝ”๋“œ๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์Œ“๊ฒŒ ํ•˜๊ณ  ์ƒ์‚ฐ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๋ฉฐ, ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ดํ•ดํ•˜๋Š” ๋ฐ ๊ณผ๋„ํ•œ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [5, 6]. * **๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์˜ ๋ณธ์งˆ** ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ฝ์„ ๊ฒƒ์„ ์ „์ œ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฉฐ, "์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๊ฐ€ ๊ณง ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ"์ž…๋‹ˆ๋‹ค [2]. ์งง์€ ์ฝ”๋“œ๊ฐ€ ํ•ญ์ƒ ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜(LOC)๋ฅผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์˜ ์ง€ํ‘œ๋กœ ์‚ผ์•„์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค [2, 7]. ๋ช…ํ™•ํ•œ ์˜๋„๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” ์ œ๋Œ€๋กœ ๋œ '์ถ”์ƒํ™”'๋ฅผ ๊ฐ–์ถ”๋Š” ๊ฒƒ์ด ์ง„์ •ํ•œ ์˜๋ฏธ์˜ ํด๋ฆฐ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค [8, 9]. * **๋ฆฌํŒฉํ† ๋ง๊ณผ ํด๋ฆฐ ์ฝ”๋“œ์˜ ๊ด€๊ณ„** ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ์ง€์†์ ์ธ ์ฝ”๋“œ ์œ„์ƒ ๊ด€๋ฆฌ(code hygiene)์˜ ํ•ต์‹ฌ ์‹ค์ฒœ ๋ฐฉ๋ฒ•์ด ๋ฆฌํŒฉํ† ๋ง์ž…๋‹ˆ๋‹ค [3, 10]. ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด(Robert C. Martin)์˜ ์ €์„œ ใ€ŽClean Codeใ€๊ฐ€ '์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž˜ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ'์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ๋‹ค๋ฉด, ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ(Martin Fowler)์˜ ใ€ŽRefactoringใ€์€ '๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ'์— ํŠนํ™”๋˜์–ด ์žˆ์–ด ๋‘ ๊ฐœ๋…์€ ์ƒํ˜ธ ๋ณด์™„์ ์œผ๋กœ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค [11]. ๋ฆฌํŒฉํ† ๋ง์€ ํ•จ์ˆ˜ ๊ธธ์ด ๋‹จ์ถ•, ๋ชจํ˜ธํ•œ ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ, ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ, ์กฐ๊ฑด๋ฌธ ๋‹จ์ˆœํ™” ๋“ฑ์„ ํ†ตํ•ด ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ํด๋ฆฐ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œํ‚ต๋‹ˆ๋‹ค [12-14]. ## โš–๏ธ Trade-offs & Caveats * **๋ฏธํ•™์„ ์œ„ํ•œ ๋ฆฌํŒฉํ† ๋ง ์ง€์–‘** ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ '์˜ˆ์˜๊ฒŒ' ๋งŒ๋“ค๊ฑฐ๋‚˜ 'ํด๋ฆฐ ์ฝ”๋“œ'๋ผ๋Š” ๋ฏธํ•™์ ์ธ ๋ชฉ์  ์ž์ฒด๋งŒ์„ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค [15, 16]. ์ƒ์‚ฐ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ํ–‰๋™ ๋ณ€๊ฒฝ(๊ธฐ๋Šฅ ์ถ”๊ฐ€๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •)์„ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ์ œ์  ๋ชฉ์ ์—์„œ ๋ฆฌํŒฉํ† ๋ง์„ ํ•˜๋Š” ๊ฒƒ์ด์ง€, ์•„๋ฆ„๋‹ค์›€์„ ์œ„ํ•ด ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค [15, 17]. * **๊ณผ๋„ํ•œ ์ถ”์ƒํ™”์™€ ๋ถ„์ ˆํ™”์˜ ์œ„ํ—˜** ๊ฐ€๋…์„ฑ์„ ์œ„ํ•œ๋‹ค๋Š” ๋ช…๋ชฉ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋‹จ์ผ ํ˜ธ์ถœ ํ—ฌํผ ํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ๋งน๋ชฉ์ ์œผ๋กœ ์›์น™์„ 100% ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฅผ ์ฝ๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 18, 19]. ๋ฌด๋ฆฌํ•˜๊ฒŒ ์ชผ๊ฐœ์ง„ ์ฝ”๋“œ๋Š” ์ธ์ง€์  ์˜ค๋ฒ„ํ—ค๋“œ๋‚˜ ๋ฏธ๋ฌ˜ํ•œ ๊ฒฐํ•ฉ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 20]. * **์ž˜๋ชป๋œ ์ถ”์ƒํ™” vs ์ฝ”๋“œ ์ค‘๋ณต** "์ž˜๋ชป๋œ ์ถ”์ƒํ™”๋Š” ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ์ค‘๋ณต๋ณด๋‹ค ํ›จ์”ฌ ๋” ํฐ ๋น„์šฉ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค" [9]. ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๊ฐ€ ๋น„์Šทํ•ด ๋ณด์ธ๋‹ค๊ณ  ํ•ด์„œ ์„ฑ๊ธ‰ํ•˜๊ฒŒ ์–ต์ง€ ์ถ”์ƒํ™”๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋ฉด, ํ–ฅํ›„ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ฎ์–ด์”Œ์šฐ๊ธฐ ์œ„ํ•ด ์กฐ๊ฑด๋ฌธ์ด๋‚˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด์„œ ์ฝ”๋“œ๊ฐ€ ๋”์šฑ ์ง€์ €๋ถ„ํ•ด์ง€๋Š” ๋ถ€์ž‘์šฉ์„ ๊ฒช๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [9, 19]. ๋”ฐ๋ผ์„œ ๋งน๋ชฉ์ ์ธ ์ฝ”๋“œ ์ •๋ฆฌ๋ณด๋‹ค๋Š” '3์˜ ๋ฒ•์น™(Rule of Three)'์„ ์ ์šฉํ•˜์—ฌ ์ค‘๋ณต์ด ์„ธ ๋ฒˆ ์ด์ƒ ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ๊ณตํ†ต์ ์„ ์ฐพ์•„ ๋ช…ํ™•ํ•œ ์ถ”์ƒํ™”๋ฅผ ๋„์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [21, 22]. --- *Last updated: 2026-05-03*