# [[Refactoring (๋ฆฌํŒฉํ† ๋ง)]] ## ๐Ÿ“Œ Brief Summary Refactoring(๋ฆฌํŒฉํ† ๋ง)์€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์™ธ๋ถ€์ ์ธ ๋™์ž‘(observable behavior)์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ๊ฒฝ์ œ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์ด๋‹ค [1-3]. ์ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ๋ถ€ํŒจ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ธฐ์ˆ  ๋ถ€์ฑ„(Technical Debt)๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ƒํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์  ๋„๊ตฌ์ด๋‹ค [3, 4]. ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ(Martin Fowler)์— ์˜ํ•ด ๋Œ€์ค‘ํ™”๋˜์—ˆ์œผ๋ฉฐ, ์ง€์†์ ์ธ ๋ฆฌํŒฉํ† ๋ง์€ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ  ๋ฒ„๊ทธ ๋ฐœ๊ฒฌ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋ฉฐ ์žฅ๊ธฐ์ ์ธ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๊ฐ€์†ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ๊ทœ์œจ๋กœ ํ‰๊ฐ€๋ฐ›๋Š”๋‹ค [5, 6]. ## ๐Ÿ“– Core Content * **๋ฆฌํŒฉํ† ๋ง์˜ ๊ฒฝ์ œ์„ฑ๊ณผ ๋ชฉ์ :** ๋ฆฌํŒฉํ† ๋ง์˜ ๊ทผ๋ณธ์ ์ธ ๋ชฉ์ ์€ ์ฝ”๋“œ์˜ ์‹ฌ๋ฏธ์  ์•„๋ฆ„๋‹ค์›€์ด ์•„๋‹Œ '๊ฒฝ์ œ์„ฑ'์— ์žˆ๋‹ค [6, 7]. ํด๋ฆฐ ์ฝ”๋“œ๋Š” ์ธ๊ฐ„์˜ ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ ์‹œ์Šคํ…œ์„ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ๋‹จ์ถ•์‹œํ‚จ๋‹ค [6]. ์žฅ๊ธฐ์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง์ด ๊ฒฐํ•๋œ ์‹œ์Šคํ…œ์€ ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ์Œ“์—ฌ ์ƒ์‚ฐ์„ฑ์ด ํ•˜๋ฝํ•˜๋ฏ€๋กœ, ๋ฆฌํŒฉํ† ๋ง์€ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ๋‚ฎ์ถ”๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ€์น˜ ์ „๋‹ฌ ์†๋„๋ฅผ ๋†’์ด๋Š” ํ•„์ˆ˜์ ์ธ ๊ฒฝ์ œ ํ™œ๋™์ด๋‹ค [4, 8]. * **ํ•ต์‹ฌ ์›์น™: ๋‘ ๊ฐœ์˜ ๋ชจ์ž (The Two Hats):** ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณผ์ •์—์„œ '๊ธฐ๋Šฅ ์ถ”๊ฐ€'์™€ '๋ฆฌํŒฉํ† ๋ง'์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ž‘์—…์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค [6, 9]. ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ชจ์ž๋ฅผ ์ผ์„ ๋•Œ๋Š” ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๋™์ž‘ ๊ตฌํ˜„์— ์ง‘์ค‘ํ•˜๋ฉฐ, ๋ฆฌํŒฉํ† ๋ง ๋ชจ์ž๋ฅผ ์ผ์„ ๋•Œ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์˜ค์ง ์ฝ”๋“œ ๊ตฌ์กฐ ๊ฐœ์„ ์—๋งŒ ์ „๋…ํ•ด์•ผ ํ•œ๋‹ค [6, 9]. ์ด๋ฅผ ์„ž์–ด์„œ ์ˆ˜ํ–‰ํ•  ๊ฒฝ์šฐ ๋””๋ฒ„๊น… ํšจ์œจ์ด ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜๋œ๋‹ค [6]. * **๋ฆฌํŒฉํ† ๋ง์˜ ํƒ€์ด๋ฐ: 3์˜ ๋ฒ•์น™ (Rule of Three) ๋ฐ ์ ๊ธฐ:** ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ์™€ ๋ˆ ๋กœ๋ฒ„์ธ ๊ฐ€ ์ œ์•ˆํ•œ '3์˜ ๋ฒ•์น™'์— ๋”ฐ๋ฅด๋ฉด, ์ฒ˜์Œ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ์ผ๋‹จ ์ž‘์„ฑํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ๋น„์Šทํ•œ ์ž‘์—…์„ ํ•  ๋•Œ๋Š” ์ค‘๋ณต์„ ๊ฐ์ˆ˜ํ•˜๋”๋ผ๋„ ์ง„ํ–‰ํ•˜๋ฉฐ, ์„ธ ๋ฒˆ์งธ ๋™์ผํ•œ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋  ๋•Œ ๋น„๋กœ์†Œ ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค [10, 11]. ๋˜ํ•œ, ๋ฆฌํŒฉํ† ๋ง์€ ๋ณ„๋„์˜ ์‹œ๊ฐ„์„ ๋‚ด์„œ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์ „ ์ค€๋น„ ๊ณผ์ •(Preparatory), ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •(Comprehension), ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ • ๋“ฑ ์ผ์ƒ์ ์ธ ๊ฐœ๋ฐœ ํ๋ฆ„(Opportunistic) ์†์—์„œ ์ง€์†์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค [12-14]. * **์ฝ”๋“œ ์Šค๋ฉœ (Code Smells):** ์‹œ์Šคํ…œ์— ๊นŠ์€ ์„ค๊ณ„์  ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ์•”์‹œํ•˜๋Š” ํ‘œ๋ฉด์ ์ธ ์ฆ์ƒ๋“ค์„ '์ฝ”๋“œ ์Šค๋ฉœ'์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค [15, 16]. ์ฃผ์š” ์Šค๋ฉœ๋กœ๋Š” ๋™์ผํ•œ ๋กœ์ง์ด ์‚ฐ์žฌํ•œ '์ค‘๋ณต ์ฝ”๋“œ(Duplicated Code)', ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ๋†’์ด๋Š” '๊ธด ํ•จ์ˆ˜(Long Method)', ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ์— ๊ณผ๋„ํ•˜๊ฒŒ ์˜์กดํ•˜๋Š” '๊ธฐ๋Šฅ ์š•์‹ฌ(Feature Envy)' ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ์ง•ํ›„๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์€ ๋ฆฌํŒฉํ† ๋ง์„ ์ ์šฉํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ค€์ด ๋œ๋‹ค [16-18]. * **์•ˆ์ „๋ง์œผ๋กœ์„œ์˜ ํ…Œ์ŠคํŠธ:** ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ์™ธ๋ถ€ ๋™์ž‘์ด ๋ณ€ํ•˜์ง€ ์•Š์•˜์Œ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฒฌ๊ณ ํ•œ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ(Automated Tests) ์Šค์œ„ํŠธ๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค [19-21]. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Tests)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์€ ๋‹จ์œ„์˜ ๋ณ€ํ™˜์„ ์ ์šฉํ•˜๊ณ , ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ์ฆ‰์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ฒฐํ•จ์„ ํƒ์ง€ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์•ผ ์•ˆ์ „ํ•œ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค [19, 21, 22]. ## โš–๏ธ Trade-offs & Caveats * **ํ…Œ์ŠคํŠธ ๋ถ€์žฌ ์‹œ์˜ ๋†’์€ ์œ„ํ—˜์„ฑ:** ๊ฒฌ๊ณ ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ํ™˜๊ฒฝ์—์„œ์˜ ๋ฆฌํŒฉํ† ๋ง์€ ๋งค์šฐ ์œ„ํ—˜ํ•œ ์ฝ”๋“œ ์ˆ˜์ •์— ๋ถˆ๊ณผํ•˜๋ฉฐ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํšŒ๊ท€ ๋ฒ„๊ทธ(Regression Bug)๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ํ™•๋ฅ ์ด ๋†’๋‹ค [21, 23]. ๊ฑฐ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์˜์กด์„ฑ์„ ๋Š๊ณ  ์ ‘์ (Seam)์„ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธ๋ฅผ ๋ผ์›Œ๋„ฃ๊ธฐ ์ „๊นŒ์ง€๋Š” ์ฝ”๋“œ๋ฅผ ์„ฃ๋ถˆ๋ฆฌ ์žฌ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์—†๋‹ค [24]. * **์„ฑ๋Šฅ๊ณผ์˜ ์ƒ์ถฉ ๊ด€๊ณ„ (Performance Trade-off):** ๋ฆฌํŒฉํ† ๋ง์€ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ๊ฐ„์ ‘ ํ˜ธ์ถœ(Indirection)์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ๋ฐ˜๋ณต๋ฌธ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋‹จ๊ธฐ์ ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์‹คํ–‰ ์†๋„๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ๋‹ค [25, 26]. ํ•˜์ง€๋งŒ ๋ฆฌํŒฉํ† ๋ง์œผ๋กœ ์ž˜ ์ •๋ˆ๋œ ์ฝ”๋“œ๋Š” ์„ฑ๋Šฅ ๋ณ‘๋ชฉ(Hot spot)์„ ํŒŒ์•…ํ•˜๊ณ  ์ตœ์ ํ™”(Performance Tuning)ํ•˜๊ธฐ ํ›จ์”ฌ ์šฉ์ดํ•ด์ง€๋ฏ€๋กœ ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ๋” ๋น ๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์ถ•์— ์œ ๋ฆฌํ•˜๋‹ค [26-28]. * **๋‹จ๊ธฐ ์ผ์ • ๋ฐ ์ž์› ์ œ์•ฝ:** ๋นก๋นกํ•œ ๋งˆ๊ฐ์ผ(Tight deadlines)์ด ์ž„๋ฐ•ํ•œ ๊ฒฝ์šฐ, ๋ฆฌํŒฉํ† ๋ง์œผ๋กœ ์–ป๋Š” ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ ์ด์ ๋ณด๋‹ค ์ผ์ • ์ง€์—ฐ์œผ๋กœ ์ธํ•œ ์†์‹ค์ด ํฌ๋ฏ€๋กœ ๋ฆฌํŒฉํ† ๋ง์„ ์œ ๋ณดํ•ด์•ผ ํ•œ๋‹ค [29, 30]. ๋˜ํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์—๋งŒ ์ง‘์ค‘ํ•˜๋Š” ๊ฒฝ์˜์ง„์—๊ฒŒ ๋ฆฌํŒฉํ† ๋ง์€ ๋ถ€๊ฐ€์ ์ธ ์˜ค๋ฒ„ํ—ค๋“œ ํ™œ๋™์œผ๋กœ ์ธ์‹๋  ์ˆ˜ ์žˆ์–ด ์ด๋ฅผ ์„ค๋“ํ•ด์•ผ ํ•˜๋Š” ์กฐ์ง์  ๊ณผ์ œ๊ฐ€ ๋”ฐ๋ฅธ๋‹ค [8, 31]. * **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ๊ณต๊ฐœ๋œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ œ์•ฝ:** ๋น„์ฆˆ๋‹ˆ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์™€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ์–ด๋ ค์›€ ๋•Œ๋ฌธ์— ๋ฆฌํŒฉํ† ๋ง ์ง„ํ–‰์ด ๋งค์šฐ ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ๋‹ค [32]. ๋˜ํ•œ ์ด๋ฏธ ๋ฐœํ–‰๋œ ์ธํ„ฐํŽ˜์ด์Šค(Published Interfaces)๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์€ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์˜ ๋™์‹œ ์ˆ˜์ •์„ ๊ฐ•์ œํ•˜๊ฑฐ๋‚˜, ์ „ํ™˜ ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ตฌํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณ‘ํ–‰ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋‹ด์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค [23, 33, 34]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์ฝ”๋“œ ํ’ˆ์งˆ ๋ฐ ๊ฒ€์ฆ (Code Quality & Verification)] - [[Code Smells]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•œ ์‹œ์ ๊ณผ ๋ถ€์œ„๋ฅผ ์‹๋ณ„ํ•˜๋Š” ํ•ต์‹ฌ ์ง„๋‹จ ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธด ํ•จ์ˆ˜, ๊ฑฐ๋Œ€ ํด๋ž˜์Šค, ๊ธฐ๋Šฅ ์š•์‹ฌ ๋“ฑ ๊ตฌ์ฒด์ ์ธ ์ฝ”๋“œ์˜ ์•…์ทจ๋ฅผ ํ†ตํ•ด ์–ด๋–ค ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•(์˜ˆ: ํ•จ์ˆ˜ ์ถ”์ถœ, ๋ฉ”์„œ๋“œ ์ด๋™)์„ ์ ์šฉํ•ด์•ผ ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. - [[Test-Driven Development (TDD)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ† ๋ง์˜ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ์‹ค์ฒœ๋ฒ•์ธ Red-Green-Refactor ์‚ฌ์ดํด์˜ ๊ธฐ๋ฐ˜์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ๋Šฅ์„ ๋จผ์ € ํ†ต๊ณผ์‹œํ‚จ ํ›„(Green) ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ (Refactor)ํ•˜๋Š” ๋ฐ˜๋ณต์ ์ธ ํ๋ฆ„๊ณผ, ์ž๊ฐ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ(Self-Testing Code)๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฆฌํŒฉํ† ๋ง์˜ ์‹ฌ๋ฆฌ์  ์•ˆ์ •๊ฐ์„ ์ œ๊ณตํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. #### [์„ค๊ณ„ ๋ฐ ์‹คํ–‰ ์›์น™ (Design & Execution Principles)] - [[The Two Hats]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ† ๋ง์„ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๊ณผ ํ˜ผ๋™ํ•˜์ง€ ์•Š๊ณ  ํ›ˆ๋ จ๋œ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์‹ฌ๋ฆฌ/์ ˆ์ฐจ์  ์›์น™์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ๋Šฅ ์ถ”๊ฐ€์™€ ๊ตฌ์กฐ ๊ฐœ์„ ์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๋””๋ฒ„๊น… ํšจ์œจ์„ ๋†’์ด๊ณ  ๋ฒ„๊ทธ ์ถ”์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง์˜ ์ฒด๊ณ„์ ์ธ ์ž‘์—… ํ๋ฆ„์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. - [[Rule of Three]] - ์—ฐ๊ฒฐ ์ด์œ : ์‹ค๋ฌด์—์„œ ์ง€๋‚˜์น˜๊ฒŒ ์„ฑ๊ธ‰ํ•œ ์ถ”์ƒํ™”๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ ๊ธฐ๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒฝํ—˜ ๋ฒ•์น™์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ 3๋ฒˆ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์„ ํ”ผํ•˜๊ณ  ์ ์ ˆํ•œ ์‹œ์ ์— ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ํŒ๋‹จ ๊ธฐ์ค€์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค. - [[Technical Debt]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋ฐ ๊ฒฝ์ œ์  ์ •๋‹น์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ทผ๋ณธ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ๊ธฐ์ ์ธ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์œ„ํ•ด ํƒ€ํ˜‘ํ•œ ๋”๋Ÿฌ์šด ์ฝ”๋“œ(Dirty Code)๊ฐ€ ์–ด๋–ป๊ฒŒ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ, ๋ฆฌํŒฉํ† ๋ง์ด ์ด๋ฅผ ์ƒํ™˜ํ•˜๋Š” ๊ณผ์ •์ธ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ### Deeper Research Questions - ํ…Œ์ŠคํŠธ๊ฐ€ ์ „ํ˜€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์—์„œ ํ…Œ์ŠคํŠธ ํ•˜๋„ค์Šค๋ฅผ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด ์ ‘์ (Seam)์„ ์ฐพ์•„๋‚ด๊ณ  ์˜์กด์„ฑ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋Š๋Š” ์ ˆ์ฐจ๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์œˆ๋„์šฐ 7 ๋ถ„์„ ์‚ฌ๋ก€์—์„œ ๋‚˜ํƒ€๋‚œ ๊ฒƒ์ฒ˜๋Ÿผ, ๋ฆฌํŒฉํ† ๋ง์ด ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„(Dependencies)์™€ ์ถœ์‹œ ํ›„ ๊ฒฐํ•จ๋ฅ (Post-release Defects)์„ ๋‚ฎ์ถ”๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? - AI ๊ธฐ๋ฐ˜ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฐ ์ž๋™ ๋ฆฌํŒฉํ† ๋ง ๋„๊ตฌ๊ฐ€ ๋„์ž…๋˜์—ˆ์„ ๋•Œ, ์ˆ™๋ จ๋œ ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์ƒ์‚ฐ์„ฑ ํ•˜๋ฝ(AI Productivity Paradox)์ด ๋ฐœ์ƒํ•˜๋Š” ์ธ์ง€์  ์›์ธ์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ๊ฐ€ ์ œ์‹œํ•œ 70์—ฌ ๊ฐ€์ง€์˜ ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ• ์ค‘, ๊ฐ€์žฅ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์“ฐ์ด๋Š” 'ํ•จ์ˆ˜ ์ถ”์ถœํ•˜๊ธฐ(Extract Method)'๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ง€์—ญ ๋ณ€์ˆ˜(Local Variables)๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ๊ณ„์  ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? - '์ดˆ๊ธฐ ์™„๋ฒฝํ•œ ์„ค๊ณ„(Big Design Up Front)'๋ฅผ ์ง€์–‘ํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•œ '์ง„ํ™”์  ์„ค๊ณ„(Evolutionary Design)'๋ฅผ ์ฑ„ํƒํ•  ๋•Œ ์š”๊ตฌ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ์ธก๋ฉด์˜ ์ค€๋น„ ์‚ฌํ•ญ์€ ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts - **Implementation:** ์ฝ”๋”ฉ ์ค‘ ๋ณต์žกํ•œ ์กฐ๊ฑด๋ฌธ์ด๋‚˜ 10~20์ค„์ด ๋„˜์–ด๊ฐ€๋Š” ๊ธด ํ•จ์ˆ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด, IDE์˜ ์ž๋™ํ™” ๊ธฐ๋Šฅ(์˜ˆ: Extract Method)์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ๋ชฉ์ ์„ ๋“œ๋Ÿฌ๋‚ด๋Š” ๋ช…ํ™•ํ•œ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•จ. - **System Design:** ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์— ์œ ์—ฐ์„ฑ์„ ์œ„ํ•œ ๋ณต์žกํ•œ ์ถ”์ƒํ™”๋ฅผ ๋ฌด๋ฆฌํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ธฐ๋ณด๋‹ค, ํ˜„์žฌ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์„ค๊ณ„๋ฅผ ๊ตฌํ˜„ํ•œ ๋’ค ํ–ฅํ›„ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋กœ ์ ์ง„์ ์œผ๋กœ ์ง„ํ™”์‹œํ‚ด. - **Operation / Maintenance:** ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์œ„ํ•ด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณผ ๋•Œ, ๋จผ์ € ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ๊ตฌ์กฐ๋‚˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ดํ•ด๋ฅผ ์œ„ํ•œ ๋ฆฌํŒฉํ† ๋ง(Comprehension Refactoring)์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์‹ค์ œ ์ˆ˜์ • ์ž‘์—…์„ ์ง„ํ–‰ํ•จ. - **Learning Path:** TDD ์‚ฌ์ดํด ๋ฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ๋ฒ•์„ ์šฐ์„  ์ˆ™์ง€ํ•œ ๋‹ค์Œ, ๋‹ค์–‘ํ•œ ์ฝ”๋“œ ์Šค๋ฉœ(Code Smells)์„ ์ธ์ง€ํ•˜๋Š” ํ›ˆ๋ จ์„ ํ•˜๊ณ , ์นดํƒˆ๋กœ๊ทธ์— ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•๋“ค์„ ํ•˜๋‚˜์”ฉ ์‹ค์Šตํ•˜๋ฉฐ ์ฒดํ™”ํ•จ. - **My Project Relevance:** ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ณ  ์žˆ๋Š” ๋ณต์žกํ•œ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€์— ์•ž์„œ, ์˜์กด์„ฑ์„ ๋Š๊ณ  ๋ณดํ˜ธ ๊ตฌ๋ฌธ(Guard Clauses) ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ค€๋น„์  ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ง€์†์ ์œผ๋กœ ์ค„์—ฌ๋‚˜๊ฐ. ### Adjacent Topics - [[Legacy Code]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋งˆ์ดํด ํŽ˜๋”์Šค์˜ "๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์—†๋Š” ์ฝ”๋“œ๋‹ค"๋ผ๋Š” ์ •์˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ, ์ŠคํŒŒ์šฐํŠธ ๋ฉ”์„œ๋“œ(Sprout Method)๋‚˜ ์ ‘์ (Seams) ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ์ ์ง„์ ์œผ๋กœ ํ˜„๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํƒ๊ตฌํ•จ. - [[Performance Optimization]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ€๋…์„ฑ์„ ํ™•๋ณดํ•œ ํ›„, ํ”„๋กœํŒŒ์ผ๋Ÿฌ(Profiler)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐœ๊ฒฌ๋œ ๋ณ‘๋ชฉ ์ง€์ (Hot Spots)์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰(์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ)์„ ์ค‘์ ์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ์ตœ์ ํ™” ํ”„๋กœ์„ธ์Šค์™€์˜ ์ฐจ์ด์  ๋ฐ ์‹œ๋„ˆ์ง€ ๋ฐฉ์•ˆ์„ ์กฐ์‚ฌํ•จ. --- *Last updated: 2026-05-03*