# [[Breaking Dependencies]] ## ๐Ÿ“Œ Brief Summary 'Breaking Dependencies(์˜์กด์„ฑ ์ œ๊ฑฐ)'๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์„ ๋ฐฉํ•ดํ•˜๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ์˜ ์œ ์—ฐ์„ฑ์„ ์ €ํ•ดํ•˜๋Š” ์ฝ”๋“œ ๊ฐ„์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ๋Š์–ด๋‚ด๋Š” ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์ด๋‹ค [1-3]. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด๋‚˜ ์™ธ๋ถ€ ์„œ๋“œํŒŒํ‹ฐ ์„œ๋ฒ„ ํ˜ธ์ถœ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฌด๊ฑฐ์šด ์ž์›์„ ์‹๋ณ„ํ•˜๊ณ , ์ด๋ฅผ ๊ฐ€์งœ ๊ฐ์ฒด(Mock) ๋“ฑ ๊ฐ€๋ฒผ์šด ๋Œ€์ฒด๋ฌผ๋กœ ๊ต์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰๋œ๋‹ค [1-3]. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์— ์•ˆ์ „ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ถ๊ทน์ ์œผ๋กœ ๋” ํฐ ๊ทœ๋ชจ์˜ ๋ฆฌํŒฉํ† ๋ง๊ณผ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜์„ ๋งˆ๋ จํ•  ์ˆ˜ ์žˆ๋‹ค [2, 4, 5]. ## ๐Ÿ“– Core Content * **๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋”œ๋ ˆ๋งˆ ๊ทน๋ณต์˜ ํ•ต์‹ฌ**: ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•˜๋ ค๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์ˆ˜์ ์ด์ง€๋งŒ, ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋จผ์ € ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด ๋ณต์žกํ•œ ์˜์กด์„ฑ์„ ๋Š์–ด๋‚ด์•ผ ํ•˜๋Š” ๋ชจ์ˆœ์ ์ธ ์ƒํ™ฉ์— ์ง๋ฉดํ•˜๊ฒŒ ๋œ๋‹ค [2, 6]. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์„ ๊ฐ€๋กœ๋ง‰๋Š” ๋ฌธ์ œ์˜ 99%๋Š” ์˜์กด์„ฑ ๋ฌธ์ œ(Dependency Problem)๋กœ ๊ท€๊ฒฐ๋˜๋ฉฐ, ์™ธ๋ถ€ API ํ˜ธ์ถœ, ์ „์—ญ ์˜์กด์„ฑ(Global Dependency), ํ˜น์€ ์ƒ์„ฑํ•˜๊ธฐ ๊นŒ๋‹ค๋กœ์šด ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ์ด ์ด์— ํ•ด๋‹นํ•œ๋‹ค [1, 7]. ์˜์กด์„ฑ ์ œ๊ฑฐ๋Š” ์ด ๋”œ๋ ˆ๋งˆ๋ฅผ ๋ŒํŒŒํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ด€๋ฌธ์ด๋‹ค [2]. * **์ ‘์ (Seam)์˜ ์‹๋ณ„๊ณผ ํ™œ์šฉ**: ์˜์กด์„ฑ์„ ๋Š๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์ธ '์ ‘์ (Seam)'์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค [1, 2, 4]. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ํ™•์žฅ(Extend)ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์‹ค์ œ DB์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋„๋ก ๋ฉ”์„œ๋“œ์˜ ๋™์ž‘์„ ๋ฎ์–ด์“ฐ๋Š” ๋ฐฉ์‹์„ ์ทจํ•ด ์˜์กด์„ฑ์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค [8, 9]. * **์˜์กด์„ฑ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•œ ๊ตฌ์ฒด์  ๊ธฐ๋ฒ•๋“ค**: ๋งˆ์ดํด ํŽ˜๋”์Šค(Michael Feathers)๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ์˜์กด์„ฑ์„ ๋Š์–ด๋‚ด๊ธฐ ์œ„ํ•œ 24๊ฐ€์ง€์˜ '์˜์กด์„ฑ ์ œ๊ฑฐ ๊ธฐ๋ฒ•(Dependency-Breaking Techniques)' ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ œ์‹œํ•œ๋‹ค [10]. ์—ฌ๊ธฐ์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ์ ์‘์‹œํ‚ค๊ธฐ(Adapt Parameter), ๋ฉ”์„œ๋“œ ๊ฐ์ฒด ์ถ”์ถœ(Break Out Method Object), ์ธํ„ฐํŽ˜์ด์Šค ์ถ”์ถœ(Extract Interface), ์ธ์Šคํ„ด์Šค ์œ„์ž„์ž ๋„์ž…(Introduce Instance Delegator), ์ƒ์„ฑ์ž/๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”(Parameterize Constructor/Method), ํ•˜์œ„ ํด๋ž˜์Šคํ™” ๋ฐ ๋ฉ”์„œ๋“œ ์žฌ์ •์˜(Subclass and Override Method) ๋“ฑ์˜ ์‹ค์šฉ์ ์ธ ํŒจํ„ด๋“ค์ด ํฌํ•จ๋œ๋‹ค [11, 12]. * **๋ชจ๋“ˆ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์˜ ์˜์กด์„ฑ ์ œ๊ฑฐ**: ์˜์กด์„ฑ ๋ถ„๋ฆฌ๋Š” ๋‹จ์ผ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ ๋ชฉ์ ์„ ๋„˜์–ด, ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋„ ์‚ฌ์šฉ๋œ๋‹ค. ์œˆ๋„์šฐ(Windows) ๋ฆฌํŒฉํ† ๋ง ์‚ฌ๋ก€์—์„œ๋Š” ์—ฌ๋Ÿฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ„์— ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€ ์žˆ๋˜ ์›์น˜ ์•Š๋Š” ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ(inter-module dependencies)์„ ๋Š์–ด๋‚ด๊ธฐ ์œ„ํ•ด ํŠน์ • API ๊ธฐ๋Šฅ์„ ๋‹ค๋ฅธ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ด๋™์‹œํ‚ค๊ณ  ๋ถ„ํ• ํ•˜๋Š” ์‹œ์Šคํ…œ ๊ทœ๋ชจ์˜ ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค [13, 14]. ## โš–๏ธ Trade-offs & Caveats * **์ฝ”๋“œ์˜ ๋ฏธํ•™์  ์†์ƒ**: ๊ธฐ์กด ์ฝ”๋“œ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์—์„œ, ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ์ž„์‹œ์ ์ธ ๊ฐ„์ ‘ ๊ณ„์ธต์ด๋‚˜ ๋ถˆํ•„์š”ํ•ด ๋ณด์ด๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฆฌํŒฉํ† ๋ง์˜ ํŠน์ • ๋‹จ๊ณ„์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ ์ด์ „๋ณด๋‹ค ๋ฏธํ•™์ ์œผ๋กœ ์•ฝ๊ฐ„ ๋” ์ง€์ €๋ถ„ํ•ด์ง€๊ฑฐ๋‚˜(uglier) ๋ณต์žกํ•ด์ง€๋Š” ์ œ์•ฝ์ด ๋ฐœ์ƒํ•œ๋‹ค [15, 16]. * **๋ณ‘์ ์ธ ์ฝ”๋“œ ๋ฒ ์ด์Šค์—์„œ์˜ ์–ด๋ ค์›€**: ์šด์ด ์ข‹๋‹ค๋ฉด ์˜์กด์„ฑ์ด ์ž‘๊ณ  ๊ตญ์†Œ์ ์œผ๋กœ ๋ชจ์—ฌ์žˆ์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ง๊ฐ€์ง„ ๋ณ‘์ ์ธ(pathological) ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์˜์กด์„ฑ์ด ์ˆ˜์—†์ด ๋งŽ๊ณ  ์ฝ”๋“œ ์ „๋ฐ˜์— ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ํผ์ ธ ์žˆ์–ด ์ด๋ฅผ ๋Š์–ด๋‚ด๋Š” ๊ณผ์ • ์ž์ฒด๊ฐ€ ๊ทน๋„๋กœ ๊ณ ํ†ต์Šค๋Ÿฝ๊ณ  ์˜ค๋žœ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค [5]. * **์ „์ฒ˜๋ฆฌ๊ธฐ ๋ฐ ๋ง์ปค ์ ‘์ ์˜ ๋ถ€์ž‘์šฉ**: ๊ฐ์ฒด ์ ‘์ (Object Seams)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” C/C++ ๊ฐ™์€ ์–ธ์–ด์—์„œ ์ „์ฒ˜๋ฆฌ๊ธฐ ๋งคํฌ๋กœ๋‚˜ ๋ง์ปค๋ฅผ ํ™œ์šฉํ•ด ์˜์กด์„ฑ์„ ๋Š๋Š” ๋ฐฉ์‹(Preprocessing / Link Seams)์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ์ฐจ์ด๋ฅผ ๋ถˆ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด, ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“  ๊นŒ๋‹ค๋กœ์šด ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค [17, 18]. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ํ…Œ์ŠคํŠธ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๋„ ์ €ํ•˜์‹œํ‚ค๋ฏ€๋กœ ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ์—†๋Š” ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค [19]. --- *Last updated: 2026-05-03*