--- id: P-REINFORCE-AUTO-WIKI-ARCH-003 category: Dev confidence_score: 0.95 tags: [architecture, di, dependency-injection, decoupling, inversion-of-control, p-reinforce] last_reinforced: 2026-05-01 --- # [[Dependency Injection (DI)|Dependency Injection (DI]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > "ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ์˜์กด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›์Œ์œผ๋กœ์จ, ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ์„ ๋Š์–ด๋‚ด๊ณ  ํ…Œ์ŠคํŠธ์™€ ํ™•์žฅ์ด ์šฉ์ดํ•œ '์œ ์—ฐํ•œ ๋ถ€ํ’ˆ'์œผ๋กœ ๋งŒ๋“œ๋Š” ์ œ์–ด ์—ญ์ „(IoC)์˜ ์‹ค์ฒœ์  ๊ธฐ๋ฒ•." ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) DI๋Š” ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. 1. **์ œ์–ด์˜ ์—ญ์ „ (IoC)**: * ๊ฐ์ฒด๊ฐ€ ์Šค์Šค๋กœ ์˜์กด์„ฑ์„ ์ƒ์„ฑ(new)ํ•˜๋Š” ๊ถŒํ•œ์„ ํฌ๊ธฐํ•˜๊ณ , ์™ธ๋ถ€(์ปจํ…Œ์ด๋„ˆ)๋กœ๋ถ€ํ„ฐ ์ฃผ์ž…๋ฐ›์Šต๋‹ˆ๋‹ค. * ์ด๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„์ฒด(Concrete Implementation)๊ฐ€ ์•„๋‹Œ ์ถ”์ƒํ™”(Interface/Abstract Class)์— ์˜์กดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 2. **์ƒ๋ช…์ฃผ๊ธฐ(Lifetime) ๊ด€๋ฆฌ**: * ์ฃผ์ž…๋˜๋Š” ๊ฐ์ฒด์˜ ์ƒ์กด ๋ฒ”์œ„(Transient, Scoped, Singleton)๋ฅผ ์ค‘์•™์—์„œ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค. * ์ž˜๋ชป๋œ ์ƒ๋ช…์ฃผ๊ธฐ ์„ค์ •์€ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ ์˜๋„์น˜ ์•Š์€ ์ƒํƒœ ๊ณต์œ ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์˜ ํ•„์ˆ˜ ์ฒดํฌ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. 3. **ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ๊ด€๋ก€**: * Spring(Java)์—์„œ๋Š” ์ƒ์„ฑ์ž ์ฃผ์ž…(Constructor Injection)์„ ๊ถŒ์žฅํ•˜๋ฉฐ, .NET์—์„œ๋Š” ๋นŒํŠธ์ธ DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ”์ธ๋”ฉ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **์ƒ๋ช…์ฃผ๊ธฐ ์˜ค์šฉ ๋ฆฌ์Šคํฌ**: Scoped ๊ฐ์ฒด๊ฐ€ Singleton ๊ฐ์ฒด์— ์ฃผ์ž…๋˜๋Š” ๋“ฑ ์ƒ๋ช…์ฃผ๊ธฐ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๋„๋ณด๋‹ค ์˜ค๋ž˜ ์œ ์ง€๋˜๊ฑฐ๋‚˜ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - **์ฝ”๋“œ ์ถ”์ ์„ฑ ์ €ํ•˜**: ์ •์  ์ฝ”๋“œ๋งŒ์œผ๋กœ๋Š” ์–ด๋–ค ๊ตฌํ˜„์ฒด๊ฐ€ ์ฃผ์ž…๋ ์ง€ ์ฆ‰๊ฐ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ช…ํ™•ํ•œ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜๊ณผ DI ๋ฐ”์ธ๋”ฉ ๋กœ๊ทธ์˜ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - [[SOLID Principles|SOLID Principles]]: ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์˜ ์‹คํ˜„ ๋ฐฉ๋ฒ•. - [[Single Responsibility Principle (SRP)|Single Responsibility Principle (SRP]]: ํด๋ž˜์Šค์˜ ์ฑ…์ž„์„ ์ƒ์„ฑ๊ณผ ์‹คํ–‰์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ด€์ . - [[แ„แ…ฆแ„‰แ…ณแ„แ…ณ แ„‹แ…ญแ†ผแ„‹แ…ตแ„‰แ…ฅแ†ผ (Testability)|Testability]]: Mock ๊ฐ์ฒด ์ฃผ์ž…์„ ํ†ตํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ ํ™•๋ณด. - Constructor Injection: ๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” DI ํŒจํ„ด. - Dependency Lifetimes: Transient, Scoped, Singleton์˜ ์ดํ•ด. ---