--- category: Unified tags: [auto-consolidated, technical-documentation] title: Dependency Inversion Principle (DIP) last_updated: 2026-05-02 --- # Dependency Inversion Principle (DIP) ## ๐Ÿ“Œ Brief Summary > ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์˜ ํ•ต์‹ฌ์ธ SOLID ์›์น™ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ์›์น™์€ ์ƒ์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์ด ํ•˜์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ์–‘์ชฝ ๋ชจ๋‘ ์ถ”์ƒํ™”(์˜ˆ: ์ธํ„ฐํŽ˜์ด์Šค)์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ทœ์ •ํ•ฉ๋‹ˆ๋‹ค [3, 4]. ์ฆ‰, ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์œผ๋กœ, ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์‹œ์Šคํ…œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [4, 5]. ## ๐Ÿ“– Core Content - **ํ•ต์‹ฌ ๊ฐœ๋… ๋ฐ ๋ชฉ์ :** DIP๋Š” ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด(Ro[[BERT|BERT]] C. Martin, Uncle Bob)์— ์˜ํ•ด ๋„์ž…๋œ ์›์น™์œผ๋กœ, ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„(concrete implementations) ๋Œ€์‹  ์ถ”์ƒํ™”์— ์˜์กดํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋А์Šจํ•œ ๊ฒฐํ•ฉ(loose coupling)์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค [2, 4, 5]. ์ƒํ•˜์œ„ ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ถ”์ƒํ™”๋กœ ์ œํ•œํ•˜์—ฌ ์‹œ์Šคํ…œ ๋ชจ๋“ˆ์„ฑ์„ ๋†’์ด๊ณ  ๋ณ€ํ™”์— ์‰ฝ๊ฒŒ ์ ์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค [4]. - **์˜์กด์„ฑ๊ณผ ์ œ์–ด ํ๋ฆ„์˜ ์—ญ์ „:** ์‹œ์Šคํ…œ ์„ค๊ณ„ ์‹œ ์ œ์–ด ํ๋ฆ„๊ณผ ์†Œ์Šค ์ฝ”๋“œ ์˜์กด์„ฑ์˜ ๋ฐฉํ–ฅ์ด ๋ฐ˜๋Œ€์ผ ๋•Œ DIP๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6]. ์˜ˆ๋ฅผ ๋“ค์–ด, Java์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ƒ์† ๊ด€๊ณ„๋ฅผ ์ ์ ˆํžˆ ๋ฐฐ์น˜ํ•จ์œผ๋กœ์จ, ์ œ์–ด ํ๋ฆ„์ด ์•„ํ‚คํ…์ฒ˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ์ง€์ ์—์„œ ์†Œ์Šค ์ฝ”๋“œ ์˜์กด์„ฑ์„ ์ œ์–ด ํ๋ฆ„๊ณผ ์ •๋ฐ˜๋Œ€์˜ ๋ฐฉํ–ฅ์œผ๋กœ ์—ญ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6, 7]. - **๊ตฌํ˜„ ๋ฐฉ๋ฒ•:** - **์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI):** DIP๋Š” ์ข…์ข… ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค [3]. Spring(Java)์ด๋‚˜ ASP.NET Core์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋‚ด์žฅ๋œ DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ฒฐํ•ฉ์„ ๋ถ„๋ฆฌํ•˜๊ณ  DIP๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8]. - **์ธํ„ฐํŽ˜์ด์Šค ์šฐ์„  ์„ค๊ณ„:** ๊ตฌํ˜„ ์ฝ”๋“œ(์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ธ๊ฐ€)๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์— ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• (์ธํ„ฐํŽ˜์ด์Šค)์„ ๋จผ์ € ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์€ DIP์˜ ์ฒ ํ•™์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [8]. - **๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(SoC)์™€์˜ ๋น„๊ต:** ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(SoC)๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถ”๋Š” ๋ฐ˜๋ฉด, DIP๋Š” ์œ ์—ฐ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ƒ์œ„ ๋ชจ๋“ˆ๊ณผ ํ•˜์œ„ ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ์„ ๋Š์–ด๋‚ด๋Š”(decoupling) ๋ฐ ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค๋Š” ๋ช…ํ™•ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [5, 9]. ## โš–๏ธ Trade-offs & Caveats - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[SOLID แ„‹แ…ฏแ†ซแ„Žแ…ตแ†จ|SOLID ์›์น™]], ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection), ์ธํ„ฐํŽ˜์ด์Šค(Interfaces), ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ([[_แ„‚แ…ฌแ„‹แ…ช แ„‘แ…กแ†ฏแ„ƒแ…กแ„…แ…ตแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต_ - แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (Separation of Concerns)|Separation of Concerns]], SoC) - **Projects/Contexts:** [[แ„€แ…ขแ†จแ„Žแ…ฆ แ„Œแ…ตแ„’แ…ฃแ†ผ แ„‘แ…ณแ„…แ…ฉแ„€แ…ณแ„…แ…ขแ„†แ…ตแ†ผ (OOP)|๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP]], ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜(Software Architecture), [[แ„แ…ณแ†ฏแ„…แ…ตแ†ซ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ (Clean Architecture)|ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜(Clean Architecture]] - **Contradictions/Notes:** ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(SoC)์™€ ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์€ ์„œ๋กœ๋ฅผ ๋ณด์™„ํ•˜๋Š” ์„ค๊ณ„ ์›์น™์ด๋‚˜ ์ดˆ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. SoC๋Š” ๊ด€์‹ฌ์‚ฌ์— ๋”ฐ๋ฅธ ์ฝ”๋“œ์˜ ๊ตฌ์„ฑ๊ณผ ๊ฒฉ๋ฆฌ์— ์ง‘์ค‘ํ•˜๋Š” ๋ฐ˜๋ฉด, DIP๋Š” ๊ณ„์ธต ๊ฐ„(์ƒํ•˜์œ„ ๋ชจ๋“ˆ ๊ฐ„)์˜ ๋””์ปคํ”Œ๋ง์— ๋ชฉ์ ์„ ๋‘ก๋‹ˆ๋‹ค [9]. ๋˜ํ•œ, ํผ์‚ฌ๋“œ ํŒจํ„ด(Facade Pattern)๊ณผ ๊ฐ™์ด ๋‹จ์ˆœํ™”๋œ ๊ฒฝ๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๋•Œ์— ๋”ฐ๋ผ ์˜์กด์„ฑ ์—ญ์ „(DIP)์˜ ์ด์ ์ด ํฌ์ƒ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค [10]. --- *Last updated: 2026-04-18* ---