--- category: Unified tags: [auto-consolidated, technical-documentation] title: DRY (Don't Repeat Yourself) ์›์น™ last_updated: 2026-05-02 --- # DRY (Don't Repeat Yourself) ์›์น™ ## ๐Ÿ“Œ Brief Summary DRY(Don't Repeat Yourself) ์›์น™์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์ •๋ณด์™€ ๋กœ์ง์˜ ๋ฐ˜๋ณต์„ ์ค„์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ํ•ต์‹ฌ ์„ค๊ณ„ ๊ฐœ๋…์ด๋‹ค [1]. "์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋ชจ๋“  ์ง€์‹์€ ๋‹จ์ผํ•˜๊ณ  ๋ชจํ˜ธํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ถŒ์œ„ ์žˆ๋Š” ํ‘œํ˜„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค"๋Š” ์‚ฌ์ƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ๋‹ค [1]. ์ด ์›์น™์„ ์ค€์ˆ˜ํ•˜์—ฌ ์ฝ”๋“œ ์ค‘๋ณต์„ ํ”ผํ•จ์œผ๋กœ์จ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๋ฉฐ, ๋ณด๋‹ค ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค [1]. --- DRY(Don't Repeat Yourself) ์›์น™์€ ์‹œ์Šคํ…œ ๋‚ด์˜ ๋ชจ๋“  ์ง€์‹๊ณผ ๋กœ์ง์ด ๋‹จ์ผํ•˜๊ณ  ๋ช…ํ™•ํ•˜๋ฉฐ ๊ถŒ์œ„ ์žˆ๋Š” ํ‘œํ˜„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ ์›์น™์ด๋‹ค [1]. ์•ค๋”” ํ—ŒํŠธ์™€ ๋ฐ์ด๋ธŒ ํ† ๋งˆ์Šค์˜ ์ €์„œ '์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ'์—์„œ ๋Œ€์ค‘ํ™”๋œ ์ด ๊ฐœ๋…์€ ์ฝ”๋“œ์™€ ์ •๋ณด์˜ ์ค‘๋ณต์„ ์ค„์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค [1]. ๋™์ผํ•œ ๋กœ์ง์ด ์—ฌ๋Ÿฌ ๊ณณ์— ๋ณต์‚ฌ ๋ฐ ๋ถ™์—ฌ๋„ฃ๊ธฐ ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ, ๋‹จ์ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์— ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉ๋˜๋„๋ก ํ•จ์œผ๋กœ์จ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์žฅ๊ธฐ์ ์ธ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ธ๋‹ค [1]. ## ๐Ÿ“– Core Content * **DRY์˜ ํ•ต์‹ฌ ๋ชฉํ‘œ์™€ ์›๋ฆฌ:** DRY ์›์น™์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ชฉํ‘œ๋Š” ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ์™€ ๋กœ์ง์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋™์ผํ•œ ๋กœ์ง์ด ์—ฌ๋Ÿฌ ๊ณณ์— ๋ณต์‚ฌ๋˜์–ด ๋ถ™์—ฌ๋„ฃ์–ด์งˆ ๊ฒฝ์šฐ, ๋‹จ ํ•œ ๋ฒˆ์˜ ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ๋„ ๋ชจ๋“  ์œ„์น˜๋ฅผ ์ฐพ์•„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ณ  ๋น„ํšจ์œจ์ ์ด๋‹ค [1]. ๋”ฐ๋ผ์„œ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ **๋กœ์ง์ด ๋‹จ ํ•œ ๊ณณ์—๋งŒ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅ**ํ•ด์•ผ ํ•œ๋‹ค [2]. * **์‹ค์ œ ๊ตฌํ˜„ ๋ฐฉ์‹ (How DRY Works in Practice):** * **์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ๋ฐ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ:** ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์ด๋‚˜ ํฌ๋งทํŒ… ๋กœ์ง์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ์ค‘์•™ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋‚˜ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ถ”์ถœํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค [2]. * **๊ธฐ๋ณธ ํด๋ž˜์Šค(Base Classes) ๋ฐ ์ƒ์†:** ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์—์„œ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ณตํ†ต ๋™์ž‘์ด๋‚˜ ์†์„ฑ์„ ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ๋ฐฐ์น˜ํ•œ๋‹ค. ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ์ •์˜ํ•  ํ•„์š” ์—†์ด ์ด ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค [2]. * **๊ตฌ์„ฑ(Configuration) ๊ด€๋ฆฌ:** ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์ด๋‚˜ API ํ‚ค์™€ ๊ฐ™์€ ์„ค์ • ๊ฐ’์„ ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋Š” ๋Œ€์‹ , ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ์˜ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ตฌ์„ฑ ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค [2]. * **ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ™œ์šฉ:** ์ธ์ฆ, ๋ผ์šฐํŒ…, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์—๋Š” ์ด๋ฏธ ํ™•๋ฆฝ๋œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์€ ์ด๋ฏธ DRY ์›์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ **๋ฐ”ํ€ด๋ฅผ ๋‹ค์‹œ ๋ฐœ๋ช…ํ•˜๋Š” ์ผ(reinventing the wheel)**์„ ๋ฐฉ์ง€ํ•ด ์ค€๋‹ค [3]. --- DRY ์›์น™์€ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋กœ์ง์ด ๋‹จ ํ•œ ๊ณณ์—๋งŒ ์กด์žฌํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค [2]. - **์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ:** ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์ด๋‚˜ ํฌ๋งทํŒ… ๋กœ์ง ๋“ฑ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ๋ฐ˜๋ณต๋  ๊ฒฝ์šฐ, ์ด๋ฅผ ์ค‘์•™ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋‚˜ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ถ”์ถœํ•˜์—ฌ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•œ๋‹ค [2]. - **๊ธฐ๋ณธ ํด๋ž˜์Šค ๋ฐ ์ƒ์†(๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ):** ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ๊ณต์œ ๋˜๋Š” ๊ณตํ†ต ๋™์ž‘์ด๋‚˜ ์†์„ฑ์„ ๊ธฐ๋ณธ ํด๋ž˜์Šค(Base Class)์— ๋ฐฐ์น˜ํ•˜๊ณ , ๋‹ค๋ฅธ ํ•˜์œ„ ํด๋ž˜์Šค๋“ค์ด ์ด๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ ์žฌ์ •์˜๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค [2]. - **๊ตฌ์„ฑ ๊ด€๋ฆฌ์˜ ์ค‘์•™ํ™”:** ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์ด๋‚˜ API ํ‚ค์™€ ๊ฐ™์€ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๊ฐ’์„ ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋Š” ๋Œ€์‹ , ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ์ค‘์•™ ๊ตฌ์„ฑ ํŒŒ์ผ์— ์ €์žฅํ•œ๋‹ค [2]. - **๋…ผ๋ฆฌ์  ์ค‘๋ณต์˜ ์ œ๊ฑฐ:** ๋‹จ์ˆœํžˆ ๋™์ผํ•œ ์ฝ”๋“œ ๋ผ์ธ์ด ๋ฐ˜๋ณต๋˜๋Š” '๊ตฌ๋ฌธ์  ์ค‘๋ณต(syntactic duplication)'์— ๊ทธ์น˜์ง€ ์•Š๊ณ , ๋™์ผํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ด๋‚˜ ๊ฐœ๋…์ด ๋ฐ˜๋ณต๋˜๋Š” '๋…ผ๋ฆฌ์  ์ค‘๋ณต(logical duplication)'์„ ์‹๋ณ„ํ•˜๊ณ  ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•ด์•ผ ํ•œ๋‹ค [3]. - **ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ™œ์šฉ:** ์ธ์ฆ, ๋ผ์šฐํŒ…, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋“ฑ ๊ณตํ†ต์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ž‘์—…์— ์ž˜ ํ™•๋ฆฝ๋œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ๋ฐ”ํ€ด๋ฅผ ๋‹ค์‹œ ๋ฐœ๋ช…ํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ๋œ๊ณ  DRY ์›์น™์„ ํšจ๊ณผ์ ์œผ๋กœ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค [3]. ## โš–๏ธ Trade-offs & Caveats * **์„ฑ๊ธ‰ํ•œ ์ถ”์ƒํ™”์˜ ์œ„ํ—˜ (Premature Abstraction):** ์ถ”์ƒํ™”๋ฅผ ๋„์ž…ํ•˜๊ธฐ ์ „์— **"3์˜ ๊ทœ์น™(Rule of Three)"**์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ตœ์†Œ ๋‘ ๋ฒˆ ์ด์ƒ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์ถ”์ƒํ™”๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค. ์›์น™์„ ๊ธฐ๊ณ„์ ์œผ๋กœ ์ ์šฉํ•˜์—ฌ ๋„ˆ๋ฌด ์ผ์ฐ ์ถ”์ƒํ™”ํ•  ๊ฒฝ์šฐ, ์˜คํžˆ๋ ค ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์ด ์‹œ์Šคํ…œ์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค [3]. * **๊ตฌ๋ฌธ์  ์ค‘๋ณต๊ณผ ๋…ผ๋ฆฌ์  ์ค‘๋ณต์˜ ๊ตฌ๋ถ„:** DRY๋Š” ๋‹จ์ˆœํžˆ ๋™์ผํ•œ ์ฝ”๋“œ ๋ผ์ธ์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ(๊ตฌ๋ฌธ์  ์ค‘๋ณต)๋งŒ์„ ํ”ผํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ง„์ •ํ•œ ๋ชฉํ‘œ๋Š” **๋™์ผํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ด๋‚˜ ๋กœ์ง(๋…ผ๋ฆฌ์  ์ค‘๋ณต)**์˜ ๋ฐ˜๋ณต์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒ‰๋ณด๊ธฐ์—๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ ๋ธ”๋ก์ด๋ผ๋„ ๋™์ผํ•œ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค [3]. * **๋ช…ํ™•์„ฑ๊ณผ์˜ ๊ท ํ˜• (Balance DRY with Clarity):** ๋•Œ๋กœ๋Š” **์•ฝ๊ฐ„์˜ ์ฝ”๋“œ ์ค‘๋ณต์ด ๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ์ถ”์ƒํ™”๋ณด๋‹ค ํ›จ์”ฌ ๋” ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ  ๋œ ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค** [3]. ํ•ญ์ƒ ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ๊ณผ ๋‹จ์ˆœ์„ฑ์„ ์šฐ์„ ์‹œํ•ด์•ผ ํ•˜๋ฉฐ, DRY ์›์น™์— ์ง€๋‚˜์น˜๊ฒŒ ์–ฝ๋งค์—ฌ ์˜คํžˆ๋ ค ์ฝ๊ธฐ ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค [3]. --- DRY ์›์น™์„ ๋งน๋ชฉ์ ์œผ๋กœ ์ ์šฉํ•  ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์„ ๋”ํ•˜๋Š” '์„ฑ๊ธ‰ํ•œ ์ถ”์ƒํ™”(Premature abstraction)'๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค [3]. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๊ฐ€ ์ตœ์†Œ ๋‘ ๋ฒˆ ์ด์ƒ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์„ ๋ชฉ๊ฒฉํ•œ ํ›„์— ์ถ”์ƒํ™”๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” '3์˜ ๊ทœ์น™(Rule of Three)'์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅ๋œ๋‹ค [3]. ๋˜ํ•œ ์ง€๋‚˜์นœ ์ถ”์ƒํ™”๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ์‹ฌํ•˜๊ฒŒ ๊ผฌ์ด๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์•ฝ๊ฐ„์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ์ฝ๊ธฐ ์‰ฝ๊ณ  ๋œ ๋ณต์žกํ•  ๋•Œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ์›์น™์˜ ๊ธฐ๊ณ„์ ์ธ ์ค€์ˆ˜๋ณด๋‹ค ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ(Clarity)๊ณผ ๋‹จ์ˆœ์„ฑ์„ ํ•ญ์ƒ ์šฐ์„ ์‹œํ•ด์•ผ ํ•œ๋‹ค [3]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์„ค๊ณ„ ์›์น™] - [[Separation of Concerns (SoC)]] - ์—ฐ๊ฒฐ ์ด์œ : ์ฝ”๋“œ๋ฅผ ์„œ๋กœ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ณ„๊ฐœ์˜ ์„น์…˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ธฐ๋Šฅ๋ณ„ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜์˜ ๊ธฐ์ดˆ ์›์น™์ด๋‹ค [4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด์—์„œ ์–ด๋–ค ๋กœ์ง์ด ์ค‘๋ณต(DRY ์œ„๋ฐ˜)๋˜๊ณ  ์žˆ๋Š”์ง€ ๋ช…ํ™•ํžˆ ์‹๋ณ„ํ•˜๊ณ , ๊ฐ ๋ชจ๋“ˆ์ด ๊ฒน์น˜์ง€ ์•Š๋Š” ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ–๋„๋ก ์ถ”์ƒํ™”ํ•˜๋Š” ๊ตฌ์กฐ์  ๋ฐฐ๊ฒฝ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [1, 4]. - [[SOLID Principles]] - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ์Šคํ…œ์„ ์œ ์—ฐํ•˜๊ณ  ์ดํ•ด ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ 5๊ฐ€์ง€ ๊ธฐ๋ณธ ์„ค๊ณ„ ์›์น™์œผ๋กœ, DRY์™€ ํ•จ๊ป˜ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋†’์ด๋Š” ๋ฐ ๊ธฐ์—ฌํ•œ๋‹ค [5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŠนํžˆ '๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)'์„ ํ†ตํ•ด ํŠน์ • ํด๋ž˜์Šค๋‚˜ ๋กœ์ง์ด ์™œ ๋‹จ ํ•œ ๊ฐ€์ง€์˜ ์ฑ…์ž„(๋‹จ์ผํ•˜๊ณ  ๊ถŒ์œ„ ์žˆ๋Š” ํ‘œํ˜„)๋งŒ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”์ง€ ๋…ผ๋ฆฌ์  ๋งฅ๋ฝ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [1, 5, 6]. #### [์‹ค๋ฌด ๊ตฌํ˜„ ๋ฐ ์ฝ”๋“œ๋ฒ ์ด์Šค ๊ด€๋ฆฌ] - [[Refactoring]] - ์—ฐ๊ฒฐ ์ด์œ : DRY ์›์น™์„ ์œ„๋ฐ˜ํ•œ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ, ์ด๋ฅผ ๋” ๋‚˜์€ ์„ค๊ณ„๋กœ ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ์‹ค๋ฌด์ ์ธ ๊ฐœ์„  ๊ณผ์ •์ด๋‹ค [7, 8]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ๋Š” ๊ณผ์ •์—์„œ ๋†’์€ ๊ณ ํ†ต(high-pain)์„ ์œ ๋ฐœํ•˜๋Š” ์ค‘๋ณต์„ ์‹๋ณ„ํ•˜๊ณ , ๋ชฉ์ ์„ ๊ฐ€์ง„ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ  ๋ช…ํ™•์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [8]. ### Deeper Research Questions - ์„ฑ๊ธ‰ํ•œ ์ถ”์ƒํ™”(Premature Abstraction)๊ฐ€ ์œ ๋ฐœํ•˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ณต์žก์„ฑ ์ฆ๊ฐ€ ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ด๋ฉฐ, 3์˜ ๊ทœ์น™(Rule of Three) ์™ธ์— ์ด๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? - ์ฝ”๋“œ ๋…ํ•ด ๊ณผ์ •์—์„œ ๊ตฌ๋ฌธ์  ์ค‘๋ณต(Syntactic Duplication)๊ณผ ๋…ผ๋ฆฌ์  ์ค‘๋ณต(Logical Duplication)์„ ๊ตฌ๋ณ„ํ•ด ๋‚ด๋Š” ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - ๊ณ ๋„๋กœ ๋ณต์žกํ•˜๊ณ  ์˜ค๋ž˜๋œ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์—์„œ ๊ธฐ์กด์˜ ๊ด‘๋ฒ”์œ„ํ•œ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์ถ”์ƒํ™”ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์กฐ์  ๋ฆฌ์Šคํฌ์™€ ํ•œ๊ณ„๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ์‹œ์Šคํ…œ์˜ ๊ฐ€๋…์„ฑ(Clarity)๊ณผ ๋‹จ์ˆœ์„ฑ์„ ์œ„ํ•ด DRY ์›์น™์„ ์˜๋„์ ์œผ๋กœ ์œ„๋ฐ˜ํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ๋” ๋‚˜์€ ์•„ํ‚คํ…์ฒ˜์  ์„ ํƒ์ด ๋˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ์ƒํ™ฉ์€ ์–ธ์ œ์ธ๊ฐ€? - ์ค‘๋ณต ๋กœ์ง์„ ์ค‘์•™ ์ง‘์ค‘์‹ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋‚˜ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ถ”์ƒํ™”ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ(Tight Coupling) ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ์ฝ”๋“œ๊ฐ€ ์ตœ์†Œ ๋‘ ๋ฒˆ ์ด์ƒ ์ค‘๋ณต๋˜๋Š” ๋…ผ๋ฆฌ์  ๋ฐ˜๋ณต(Rule of Three)์„ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ, ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜, ํด๋ž˜์Šค ์ƒ์†, ๋˜๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค [2, 3]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์‹œ, ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์˜ค์ง ํ•˜๋‚˜์˜ ๊ถŒ์œ„ ์žˆ๋Š” ์œ„์น˜๋ฅผ ๊ฐ€์ง€๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ ๊ตฌํ˜„ ๋ณต์žก์„ฑ์„ ๋‚ฎ์ถ˜๋‹ค [1, 7]. - **Operation / Maintenance:** ์ค‘๋ณต ๋กœ์ง์„ ์ œ๊ฑฐํ•จ์œผ๋กœ์จ, ํ–ฅํ›„ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ํ•œ ๊ณณ์˜ ์ฝ”๋“œ๋งŒ ์—…๋ฐ์ดํŠธํ•ด๋„ ์ „์ฒด ์‹œ์Šคํ…œ์— ๋ฐ˜์˜๋˜๊ฒŒ ํ•˜์—ฌ ์šด์˜ ์ค‘์˜ ์˜ค๋ฅ˜์™€ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ(๊ธฐ์ˆ  ๋ถ€์ฑ„)์„ ์ตœ์†Œํ™”ํ•œ๋‹ค [1, 7]. - **Learning Path:** ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฒ˜์Œ ํ•™์Šตํ•˜๊ณ  ํŒŒ์•…ํ•  ๋•Œ, ์–ด๋””์— ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ ๋œ ์ฝ”๋“œ๊ฐ€ ๋งŽ์€์ง€ ์‹๋ณ„ํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ์ง„๋‹จํ•˜๊ณ , ํ–ฅํ›„ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์ฝ”๋“œ ๊ฐœ์„  ๋ฐฉํ–ฅ์˜ ์ง€ํ‘œ๋กœ ์‚ผ๋Š”๋‹ค [7, 8]. - **My Project Relevance:** ํ˜„์žฌ ํƒ์ƒ‰ ์ค‘์ธ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ํฉ์–ด์ ธ ์žˆ๋Š” ๋™์ผํ•œ ๋กœ์ง๋“ค์„ ํ•˜๋‚˜์˜ ํ๋ฆ„์œผ๋กœ ์ดํ•ดํ•˜๊ณ , ์ด๊ฒƒ์ด ์˜๋„๋œ ๋ช…ํ™•์„ฑ์„ ์œ„ํ•œ ์ค‘๋ณต์ธ์ง€ ์•„๋‹ˆ๋ฉด ์ถ”์ƒํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ธฐ์ˆ  ๋ถ€์ฑ„์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ์˜ ํ•ต์‹ฌ ๊ธฐ์ค€์ด ๋œ๋‹ค [1, 3, 8]. ### Adjacent Topics - [[Technical Debt]] - ํ™•์žฅ ๋ฐฉํ–ฅ: DRY ์›์น™์„ ๋ฌด์‹œํ•˜๊ณ  ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ๋ฐฉ์น˜ํ–ˆ์„ ๋•Œ ์žฅ๊ธฐ์ ์œผ๋กœ ์‹œ์Šคํ…œ ์œ ์ง€๋ณด์ˆ˜์— ๋ˆ„์ ๋˜๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„์˜ ์†์„ฑ๊ณผ ๊ทธ ๋น„์šฉ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [1]. - [[Code Smells]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ค‘๋ณต ์ฝ”๋“œ(Duplicate Code), ๊ฑฐ๋Œ€ํ•œ ํด๋ž˜์Šค, ๊ธด ๋ฉ”์„œ๋“œ ๋“ฑ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ•ด์น˜๋Š” ๋‹ค์–‘ํ•œ ์ฝ”๋“œ์˜ ์•…์ทจ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ํŒจํ„ด์„ ์—ฐ๊ตฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [9]. --- *Last updated: 2026-05-02* --- ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜•: ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์„ค๊ณ„ ์›์น™] - [[SOLID ์›์น™]] - ์—ฐ๊ฒฐ ์ด์œ : DRY์™€ ํ•จ๊ป˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์œ ์—ฐํ•˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํŒŒ์šด๋ฐ์ด์…˜ ์›์น™์ด๋‹ค [4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์ด๋‚˜ ๊ฐœ๋ฐฉ/ํ์‡„ ์›์น™(OCP)์„ ์ดํ•ดํ•˜๋ฉด, ์ค‘๋ณต ์ œ๊ฑฐ(DRY) ์‹œ ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ด€์ ์„ ๊ธฐ๋ฅผ ์ˆ˜ ์žˆ๋‹ค [4, 5]. - [[๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (Separation of Concerns, SoC)]] - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ์Šคํ…œ์„ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๋Š” ๋ณ„๊ฐœ์˜ ์„น์…˜์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ณต์žก์„ฑ์„ ์ค„์ด๋Š” ๊ทผ๋ณธ ์›์น™์œผ๋กœ, ๋…ผ๋ฆฌ์™€ ์ฝ”๋“œ์˜ ๊ฒน์นจ(์ค‘๋ณต)์„ ํ”ผํ•˜๋Š” DRY ์›์น™๊ณผ ์ƒํ˜ธ ๋ณด์™„์ ์ธ ๊ด€๊ณ„์ด๋‹ค [6]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋กœ์ง, ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต ๋“ฑ์„ ๋ถ„๋ฆฌํ•˜๋Š” ์•ˆ๋ชฉ์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด์—์„œ ๊ณตํ†ต ๋กœ์ง์ด ์–ด๋–ค ๊ณ„์ธต์— ๋ฐฐ์น˜๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [6, 7]. #### [๊ด€๊ณ„ ์œ ํ˜•: ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๊ฐœ๋…] - [[๋””์ž์ธ ํŒจํ„ด (Design Patterns)]] - ์—ฐ๊ฒฐ ์ด์œ : ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…(ํ…œํ”Œ๋ฆฟ)์„ ์ œ๊ณตํ•˜์—ฌ, ์‹ค๋ฌด์—์„œ DRY ์›์น™์„ ํšจ์œจ์ ์œผ๋กœ ์‹คํ˜„ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค [8]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํŒŒ์•…ํ•  ๋•Œ ์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰์œ„ ํŒจํ„ด์„ ์‹๋ณ„ํ•จ์œผ๋กœ์จ ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์ด ์–ด๋–ป๊ฒŒ ์ถ”์ƒํ™”๋˜๊ณ  ๊ฐ์ฒดํ™”๋˜์–ด ๊ด€๋ฆฌ๋˜๋Š”์ง€ ๊ตฌ์กฐ์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [9-11]. - [[๊ธฐ์ˆ  ๋ถ€์ฑ„ (Technical Debt)]] - ์—ฐ๊ฒฐ ์ด์œ : DRY ์›์น™์„ ์œ„๋ฐฐํ•œ ๋ฌด๋ถ„๋ณ„ํ•œ ์ฝ”๋“œ ์ค‘๋ณต์€ ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ๊ฐ€์ค‘์‹œํ‚ค๊ณ  ํ–ฅํ›„ ์ˆ˜์ •์„ ๋งค์šฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์–ด, ์žฅ๊ธฐ์ ์ธ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์œ ๋ฐœํ•˜๋Š” ํ•ต์‹ฌ ์›์ธ์ด ๋œ๋‹ค [1, 12]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ์กด ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ฆฌ๋ทฐํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ, ๋ฆฌํŒฉํ† ๋ง์ด ๊ฐ€์žฅ ์‹œ๊ธ‰ํ•œ ๊ณ ํ†ต ์ง€์ (high-pain area)์„ ์‹๋ณ„ํ•˜๊ณ  ๋ถ€์ฑ„๋ฅผ ์ƒํ™˜ํ•˜๋Š” ๊ธฐ์ˆ ์  ๋งฅ๋ฝ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค [13]. ### Deeper Research Questions - ๊ตฌ๋ฌธ์  ์ค‘๋ณต(Syntactic duplication)๊ณผ ๋…ผ๋ฆฌ์  ์ค‘๋ณต(Logical duplication)์„ ์‹ค์ œ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ƒ์—์„œ ์–ด๋–ป๊ฒŒ ์ •ํ™•ํžˆ ์‹๋ณ„ํ•˜๋ฉฐ, ๊ฐ๊ฐ์˜ ์ถ”์ƒํ™” ๊ธฐ์ค€์€ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”๊ฐ€? [3] - '3์˜ ๊ทœ์น™(Rule of Three)'์„ ์ค€์ˆ˜ํ•˜์—ฌ ๋‘ ๋ฒˆ์˜ ์ฝ”๋“œ ์ค‘๋ณต๊นŒ์ง€ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด, ์˜คํžˆ๋ ค ์žฅ๊ธฐ์ ์ธ ์ฝ”๋“œ๋ฒ ์ด์Šค ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฐ ์‹œ์Šคํ…œ ๋ณต์žก๋„ ์™„ํ™”์— ๋ฏธ์น˜๋Š” ๊ธ์ •์  ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [3] - ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ(Clarity) ํ™•๋ณด์™€ DRY ์›์น™ ๊ธฐ๋ฐ˜์˜ ์ถ”์ƒํ™” ์ ์šฉ์ด ์ถฉ๋Œํ•˜๋Š” ์ƒํ™ฉ์—์„œ, ์–ด๋А ์ˆ˜์ค€๊นŒ์ง€ ์ถ”์ƒํ™”๋ฅผ ํ—ˆ์šฉํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ง€์นจ์€ ์–ด๋–ป๊ฒŒ ๋งˆ๋ จํ•ด์•ผ ํ•˜๋Š”๊ฐ€? [3] - ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ, ์—ฌ๋Ÿฌ ๊ณณ์— ์ค‘๋ณต๋œ ๊ธฐ์กด ๋กœ์ง์„ ์ค‘์•™ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋‚˜ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณ‘ํ•ฉํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€์ž‘์šฉ๊ณผ ์˜์กด์„ฑ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [2, 13] - ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(Microservices) ์•„ํ‚คํ…์ฒ˜ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์ž์œจ์ ์ธ ์„œ๋น„์Šค ๊ฐ„์— ๋ฐœ์ƒํ•˜๋Š” ๋…ผ๋ฆฌ์  ์ค‘๋ณต์€ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด๋ฅผ ๋งน๋ชฉ์ ์œผ๋กœ DRY ์›์น™์œผ๋กœ ๋ฌถ์–ด๋‚ผ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๊ฒฐํ•ฉ(Tight coupling) ์œ„ํ—˜์€ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•˜๋Š”๊ฐ€? [14, 15] ### Practical Application Contexts - **Implementation:** ๊ฐœ๋ฐœ ์‹œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋ฐ ํฌ๋งทํŒ… ๋กœ์ง์ด๋‚˜ ๊ตฌ์„ฑ ๊ฐ’(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด ๋“ฑ)์ด ์—ฌ๋Ÿฌ ๊ณณ์— ํ•˜๋“œ์ฝ”๋”ฉ๋˜์ง€ ์•Š๋„๋ก, ์ค‘์•™ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋‚˜ ๋‹จ์ผ ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋ชจ์•„ ๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์›(Single source of truth)์„ ํ™•๋ณดํ•œ๋‹ค [1, 2]. - **System Design:** ์ดˆ๊ธฐ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์ •์˜ ๋‹จ๊ณ„์—์„œ ๋ฐ˜๋ณต๋  ์ˆ˜ ์žˆ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ํŒŒ์•…ํ•˜๊ณ , ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์ž˜ ํ™•๋ฆฝ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ƒ์„ฑ์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•œ๋‹ค [2, 3]. - **Operation / Maintenance:** ๊ธฐ์กด ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ์œ ์ง€๋ณด์ˆ˜ํ•  ๋•Œ, ์ฝ”๋“œ ๋ณต์‚ฌ ๋ฐ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋กœ ์ธํ•ด ๋ณ€๊ฒฝ์ด ์–ด๋ ต๊ณ  ๋ณต์žก์„ฑ์ด ๋†’์€ ์˜์—ญ์„ ์ฐพ์•„ DRY ์›์น™์„ ์ ์šฉํ•˜๋Š” '๋ชฉ์  ์žˆ๋Š” ๋ฆฌํŒฉํ† ๋ง(Refactor with a purpose)'์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [13]. - **Learning Path:** ๋‚ฏ์„  ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์˜จ๋ณด๋”ฉํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ํŒŒ์•…ํ•  ๋•Œ, ์ „๋ฐ˜์ ์œผ๋กœ ๋ฐ˜๋ณต ์‚ฌ์šฉ๋˜๋Š” ๊ณต์œ  ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ชจ๋“ˆ์ด๋‚˜ ๊ณตํ†ต ๋ฒ ์ด์Šค ํด๋ž˜์Šค๋ฅผ ๋จผ์ € ํ™•์ธํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ๋™์ž‘ ๊ทœ์น™์„ ์‹ ์†ํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [2]. - **My Project Relevance:** ํ”„๋กœ์ ํŠธ ๋‚ด ๋ฌด์˜์‹์ ์ธ ์ฝ”๋“œ ๋ณต์ œ ๊ด€ํ–‰์„ ์ ๊ฒ€ํ•˜๊ณ  ๋…ผ๋ฆฌ์  ์ค‘๋ณต์„ ํ†ตํ•ฉํ•˜์—ฌ, ํ–ฅํ›„ ์‹œ์Šคํ…œ์˜ ํŠน์ • ๊ธฐ๋Šฅ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋‹จ ํ•œ ๊ณณ์˜ ์ˆ˜์ •๋งŒ์œผ๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์— ์ •ํ™•ํ•˜๊ฒŒ ๋ฐ˜์˜๋˜๋„๋ก ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ธ๋‹ค [1]. ### Adjacent Topics - [[๋ฆฌํŒฉํ† ๋ง (Refactoring)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ธฐ์กด์˜ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ถ”์ถœ(Extract Method)ํ•˜๊ฑฐ๋‚˜ ๋ถ„๋ฆฌ๋œ ๋กœ์ง์„ ๋ณ‘ํ•ฉํ•˜๋Š” ๋“ฑ, ์†Œํ”„ํŠธ์›จ์–ด์˜ ์™ธ๋ถ€ ๋™์ž‘ ๋ณ€๊ฒฝ ์—†์ด ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ DRY ์›์น™์„ ์‹คํ˜„ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์ฝ”๋“œ ์ˆ˜์ค€์˜ ์‹ค๋ฌด ๊ธฐ๋ฒ•์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [16]. - [[ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๊ณผ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋…ผ๋ฆฌ๋ฅผ ์‹œ์Šคํ…œ์˜ ๊ฐ€์žฅ ๊นŠ์€ ์ค‘์‹ฌ์— ๋‘๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ, UI, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ์˜ ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์—„๊ฒฉํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ, ํ•ต์‹ฌ ๋„๋ฉ”์ธ ์ง€์‹์˜ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ์— ๋…๋ฆฝ์ ์ธ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋Š” ๊ฑฐ์‹œ์ ์ธ ์•„ํ‚คํ…์ฒ˜ ์ฒ ํ•™์œผ๋กœ ์ดํ•ด๋ฅผ ๋„“ํž ์ˆ˜ ์žˆ๋‹ค [17]. --- *Last updated: 2026-05-02*