๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[DI]DI ์ปจํ…Œ์ด๋„ˆ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์š”์†Œ์™€ ๊ฐœ์„  ๋ฐฉ๋ฒ•

์ถœ์ฒ˜

ChatGPT


DI(Dependency Injection) ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ฃผ์ž…ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ์ค‘์š”ํ•œ ๋„๊ตฌ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์š”์†Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค. 

DI ์ปจํ…Œ์ด๋„ˆ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์š”์†Œ

1. ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ ํ•ด์„

1. ๋ฌธ์ œ์ 

์ผ๋ถ€ DI ์ปจํ…Œ์ด๋„ˆ๋Š” ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๋Ÿฐํƒ€์ž„์— ํ•ด์„ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค. ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ ํ•ด์„์€ ๊ฐ์ฒด์˜ ์˜์กด์„ฑ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์„ฑ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ, ์˜์กด์„ฑ ํŠธ๋ฆฌ๊ฐ€ ๊นŠ๊ฑฐ๋‚˜ ๋ณต์žกํ•  ๊ฒฝ์šฐ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋‘๋“œ๋Ÿฌ์ง„๋‹ค.

2. ๊ฐœ์„  ๋ฐฉ๋ฒ•

  • ์ปดํŒŒ์ผ ํƒ€์ž„ ์˜์กด์„ฑ ํ•ด์„: ์ปดํŒŒ์ผ ํƒ€์ž„์— ์˜์กด์„ฑ์„ ํ•ด์„ํ•˜์—ฌ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ ๋ถ„์„์„ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” DI ์ปจํ…Œ์ด๋„ˆ(Dagger 2 ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„ ๋‹จ์ˆœํ™”: ์˜์กด์„ฑ ํŠธ๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ค„์ด๊ณ , ๊ฐ์ฒด์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.

2. ๊ฐ์ฒด์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋ฐ ๋ฒ”์œ„ ๊ด€๋ฆฌ

1. ๋ฌธ์ œ์ 

๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ๋˜ํ•œ, ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป ๊ด€๋ฆฌํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ ์œ ๋กœ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๊ฐœ์„  ๋ฐฉ๋ฒ•

  • ์ ์ ˆํ•œ ๋ฒ”์œ„ ์‚ฌ์šฉ : ๊ฐ์ฒด์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ์— ๋งž๋Š” ์ ์ ˆํ•œ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‹ฑ๊ธ€ํ†ค ๋ฒ”์œ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ชจ๋“  ๊ฐ์ฒด์— ์ ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์Šค์ฝ”ํ”„ ๋ฒ”์œ„ ์‚ฌ์šฉ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ”์œ„, ์š”์ฒญ ๋ฒ”์œ„, ์„ธ์…˜ ๋ฒ”์œ„ ๋“ฑ ๋‹ค์–‘ํ•œ ์Šค์ฝ”ํ”„๋ฅผ ์ •์˜ํ•˜์—ฌ ํ•„์š”์— ๋”ฐ๋ผ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์š”์ฒญ ๋‹จ์œ„์˜ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์ง€์—ฐ ์ดˆ๊ธฐํ™”์™€ ํ”„๋กœ๋น„์ €๋‹

1. ๋ฌธ์ œ์ 

๋ชจ๋“  ์˜์กด์„ฑ์„ ํ•œ ๋ฒˆ์— ์ฃผ์ž…ํ•˜์—ฌ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.

2. ๊ฐœ์„  ๋ฐฉ๋ฒ•

  • ์ง€์—ฐ ์ดˆ๊ธฐํ™”(Lazy Initialization): ํ•„์š”ํ•œ ์‹œ์ ์—๋งŒ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋„๋ก ํ•˜์—ฌ ์ดˆ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ธ๋‹ค. ์ง€์—ฐ ์ดˆ๊ธฐํ™”๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐํ™” ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.
  • ํ”„๋กœ๋ฐ”์ด๋” ํŒจํ„ด ์‚ฌ์šฉ: ํ”„๋กœ๋ฐ”์ด๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ์ƒ์„ฑ ๋น„์šฉ์ด ๋†’์€ ๊ฐ์ฒด์— ์œ ๋ฆฌํ•˜๋‹ค.

์˜ˆ

// ์ง€์—ฐ ์ดˆ๊ธฐํ™” ์˜ˆ์ œ
class Car @Inject constructor(engineProvider: Provider<Engine>) {
    private val engine: Engine by lazy { engineProvider.get() }
    
    fun drive() {
        engine.start()
        // ๋“œ๋ผ์ด๋ธŒ ๋กœ์ง
    }
}


4. ๊ณผ๋„ํ•œ ๋ฆฌํ”Œ๋ ‰์…˜ ์‚ฌ์šฉ

1. ๋ฌธ์ œ์ 

์ผ๋ถ€ DI ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜์€ ๋Ÿฐํƒ€์ž„์— ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ์„ฑ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.

2. ๊ฐœ์„  ๋ฐฉ๋ฒ•

  • ์ปดํŒŒ์ผ ํƒ€์ž„ ์ฝ”๋“œ ์ƒ์„ฑ ์‚ฌ์šฉ: ์ปดํŒŒ์ผ ํƒ€์ž„์— ์˜์กด์„ฑ์„ ํ•ด์„ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. Dagger 2๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ๋‹ค.
  • ๋ฆฌํ”Œ๋ ‰์…˜ ์ตœ์†Œํ™”: ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๊ณ , ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉ์„ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ•œ๋‹ค.

5. ๋ณต์žกํ•œ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„

1. ๋ฌธ์ œ์ 

๋ณต์žกํ•œ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋Š” DI ์ปจํ…Œ์ด๋„ˆ์˜ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์ด ์–ฝํžˆ๊ณ  ์„ค์ผœ์žˆ์œผ๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ณ , ์ด๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

2. ๊ฐœ์„  ๋ฐฉ๋ฒ•

  • ์˜์กด์„ฑ ๋‹จ์ˆœํ™”: ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋ถ„์„ํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๋‹จ์ˆœํ™”ํ•œ๋‹ค.
  • ๋ชจ๋“ˆํ™”: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๊ฐ ๋ชจ๋“ˆ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค.

 

์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์‹ค์งˆ์ ์ธ ํŒ

1. ์ปดํŒŒ์ผ ํƒ€์ž„ ์˜์กด์„ฑ ์ฃผ์ž…

  • Dagger 2: ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Dagger 2๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์— ์˜์กด์„ฑ์„ ํ•ด์„ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค. ์• ๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์„œ๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ถ„์„ํ•˜๊ณ , ์ง์ ‘ ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

2. ์ง€์—ฐ ์ดˆ๊ธฐํ™” ๋ฐ ํ”„๋กœ๋ฐ”์ด๋” ์‚ฌ์šฉ

  • Lazy ๋ฐ Provider ์‚ฌ์šฉ: ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” Dagger์˜ `Lazy` ๋ฐ `Provider`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ์‹œ์ ์— ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
class Car @Inject constructor(lazyEngine: Lazy<Engine>) {
    private val engine by lazyEngine
    
    fun start() {
        engine.start()
    }
}

 

3. ์Šค์ฝ”ํ”„ ์‚ฌ์šฉ

  • ์Šค์ฝ”ํ”„ ์ •์˜ : DI ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹ฑ๊ธ€ํ†ค์ด๋‚˜ ๋‹ค๋ฅธ ์Šค์ฝ”ํ”„๋ฅผ ์ •์˜ํ•˜์—ฌ ๊ฐ์ฒด์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•กํ‹ฐ๋น„ํ‹ฐ๋‚˜ ํ”„๋ž˜๊ทธ๋จผํŠธ ์ˆ˜์ค€์˜ ์Šค์ฝ”ํ”„๋ฅผ ์„ค์ •ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
@Module
@InstallIn(ActivityComponent::class)
object ActivityModule {
    @Provides
    @ActivityScoped
    fun provideCar(engine: Engine): Car {
        return Car(engine)
    }
}

 

4. ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„ ์ตœ์ ํ™”

  • ๊ทธ๋ž˜ํ”„ ์ตœ์ ํ™”: ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ค„์ด๊ณ , ๊ฐ„๊ฒฐํ•œ ์˜์กด์„ฑ ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ ์ง€๋ณด์ˆ˜์„ฑ๋„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

5. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ง์ ‘ ์ฃผ์ž…

  • ์ง์ ‘ ์ฃผ์ž…: DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ๋‚˜ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ, ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ์„ฑ ๋น„์šฉ์ด ๋‚ฎ๊ณ  ๊ฐ„๋‹จํ•œ ๊ฐ์ฒด๋Š” ์ง์ ‘ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

6. ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉ

  • ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ ์‚ฌ์šฉ: ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด DI ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ธ๋‹ค.

7. ์บ์‹œ ์‚ฌ์šฉ

  • ์บ์‹œ: ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค. ์บ์‹œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ ์ ˆํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.


๊ฒฐ๋ก 

DI ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ฃผ์ž…ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๋„๊ตฌ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๋“ค์ด ์กด์žฌํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ์š”์†Œ๋“ค์„ ์ดํ•ดํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์ ์ ˆํ•œ DI ์ปจํ…Œ์ด๋„ˆ์˜ ์„ ํƒ๊ณผ ํ•จ๊ป˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต์„ ์ ์šฉํ•˜๋ฉด, ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์•ˆ์ •์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Ÿฌํ•œ ์ „๋žต์„ ํ†ตํ•ด DI ์ปจํ…Œ์ด๋„ˆ์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์—ฐ์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.