์ถ์ฒ
ChatGPT
์์กด์ฑ ์ฃผ์
(DI, Dependency Injection)์ ์ํํธ์จ์ด ์ค๊ณ ํจํด ์ค ํ๋๋ก, ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์ธ๋ถ์์ ์ฃผ์
ํจ์ผ๋ก์จ ๊ฐ์ฒด์ ๊ฒฐํฉ๋๋ฅผ ์ค์ด๊ณ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ
์คํธ ์ฉ์ด์ฑ์ ๋์ด๋ ๋ฐฉ๋ฒ์ด๋ค. DI ์ปจํ
์ด๋๋ ์ด๋ฌํ ์์กด์ฑ ์ฃผ์
์ ๊ด๋ฆฌํ๊ณ ์๋ํํ๋ ๋๊ตฌ๋ก์, ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ฐ์ฒด ์์ฑ ๋ฐ ๊ด๋ฆฌ, ์์กด์ฑ ํด๊ฒฐ์ ๋์์ฃผ๋ ์ค์ํ ์ญํ ์ ํ๋ค.
DI ์ปจํ ์ด๋๋?
์ ์
DI ์ปจํ ์ด๋(Dependency Injection Container)๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด์ฑ ์ฃผ์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ๋ช ์ํ๊ณ , DI ์ปจํ ์ด๋๋ ์ด ์์กด์ฑ์ ํด์ํ์ฌ ์ ์ ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฐ๊ฒฐํฉ๋๋ค.
์ญํ
- ๊ฐ์ฒด ์์ฑ: ํ์์ ๋ฐ๋ผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ค.
- ์์กด์ฑ ๊ด๋ฆฌ: ๊ฐ์ฒด์ ์์กด์ฑ์ ํด์ํ๊ณ , ํ์ํ ์์กด ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ๋ค.
- ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ: ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ์ฌ ํ์ํ ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์ฌ์ฌ์ฉํ๋ค.
DI ์ปจํ ์ด๋์ ๋์ ์๋ฆฌ
DI ์ปจํ ์ด๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ํตํด ๋์ํ๋ค.
1. ์ค์ ๋ฐ ๊ตฌ์ฑ
๊ฐ๋ฐ์๋ DI ์ปจํ ์ด๋์ ์์กด์ฑ ๊ทธ๋ํ๋ฅผ ์ค์ ํ๋ค. ์ด ๊ณผ์ ์์ ์ด๋ค ์ธํฐํ์ด์ค์ ์ด๋ค ๊ตฌํ์ฒด๋ฅผ ์ฐ๊ฒฐํ ์ง, ๊ฐ์ฒด์ ์์ฑ ๋ฐฉ์์ ์ ์ํ๋ค.
2. ์์กด์ฑ ํด์
๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํ์ํ ์์กด์ฑ์ ํด์ํ๋ค. DI ์ปจํ ์ด๋๋ ๊ฐ ๊ฐ์ฒด์ ์์ฑ์๋ ์ค์ ์ ๋ฉ์๋๋ฅผ ํตํด ์ด๋ค ์์กด์ฑ์ ํ์๋ก ํ๋์ง ํ์ ํ๋ค.
3. ๊ฐ์ฒด ์์ฑ ๋ฐ ์ฃผ์
ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ค.
์์ฑ๋ ๊ฐ์ฒด์ ์์กด์ฑ์ ์ฃผ์
ํ๋ค. ์ด๋ ์์ฑ์ ์ฃผ์
, ์ธํฐ ์ฃผ์
, ํ๋ ์ฃผ์
๋ฑ์ ๋ฐฉ๋ฒ์ ํตํด ์ด๋ฃจ์ด์ง ์ ์๋ค.
4. ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ
DI ์ปจํ ์ด๋๋ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ฑ๊ธํค ํจํด, ํธ๋์ง์ธํธ ํจํด ๋ฑ์ ๊ฐ์ฒด ๋ฒ์๋ฅผ ์ค์ ํ์ฌ, ๊ฐ์ฒด๊ฐ ์ธ์ ์์ฑ๋๊ณ ์๋ฉธํ ์ง ๊ฒฐ์ ํ๋ค.
5. ์์กด์ฑ ํด๊ฒฐ ๋ฐ ์ ๊ณต
์์ฒญ์ด ์์ ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ฑฐ๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ค.
DI ์ปจํ ์ด๋์ ์ฃผ์ ๊ธฐ๋ฅ
1. ๊ฐ์ฒด ๋ฑ๋ก ๋ฐ ํด์
- ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด ๋งคํ: DI ์ปจํ ์ด๋๋ ์ธํฐํ์ด์ค์ ํด๋น ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ๋ฑ๋กํ์ฌ ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋ ์ ์ ํ ๊ตฌํ์ฒด๋ฅผ ๋ฐํํ๋ค.
- ์์กด์ฑ ๊ทธ๋ํ ์์ฑ: ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ ๊ด๊ณ๋ฅผ ํด์ํ์ฌ ๊ทธ๋ํ๋ฅผ ์์ฑํ๊ณ , ์์กด์ฑ์ ํด๊ฒฐํ๋ค.
2. ๊ฐ์ฒด ์์ฑ ๋ฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ
- ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ: ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ค์ ํ์ฌ, ํน์ ๋ฒ์(Scope) ๋ด์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ๋งค๋ฒ ์๋ก ์์ฑํ ์ง ๊ฒฐ์ ํ๋ค.
- ์ฑ๊ธํค(Singleton): ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ํ๋์ ์ธ์คํด์ค๋ง ์์ฑ๋๋ค.
- ํธ๋์ง์ธํธ(Transient): ์์ฒญํ ๋๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค.
- ์ค์ฝํ(Scope): ํน์ ๋ฒ์ ๋ด์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ ์์ฒญ๋ณ๋ก ์ค์ฝํ๋ฅผ ์ค์ ํ ์ ์๋ค.
3. ๊ฐ์ฒด ์ฃผ์ ๋ฐฉ๋ฒ
1. ์์ฑ์ ์ฃผ์ (Constructor Injection)
์์ฑ์๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์ ํ๋ค.
class Car @Inject constructor(engine: Engine) {
// ...
}
2. ์ธํฐ ์ฃผ์
(Setter Injection)
์ธํฐ ๋ฉ์๋๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์ ํ๋ค.
class Car {
private lateinit var engine: Engine
@Inject
fun setEngine(engine: Engine) {
this.engine = engine
}
}
3. ํ๋ ์ฃผ์
(Field Injection)
ํ๋์ ์ง์ ์ฃผ์ ํ๋ค. (๊ถ์ฅ๋์ง ์์)
class Car {
@Inject
lateinit var engine: Engine
}
4. ์ง์ฐ ์ด๊ธฐํ(Lazy Initialization)
๊ฐ์ฒด๊ฐ ์ค์ ๋ก ํ์ํ ๋๊น์ง ์ด๊ธฐํ๋ฅผ ์ง์ฐ์ํจ๋ค. ์ด๋ ์ฑ๋ฅ ์ต์ ํ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๋ ๋ฐ ์ ์ฉํ๋ค.
5. ์กฐ๊ฑด๋ถ ๋ฐ์ธ๋ฉ ๋ฐ ํ๋กํ์ผ๋ง
- ์กฐ๊ฑด๋ถ ๋ฐ์ธ๋ฉ: ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ฅผ ์ฃผ์ ํ ์ ์๋๋ก ์ค์ ํ๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๋ฐฐํฌ ํ๊ฒฝ์์ ์๋ก ๋ค๋ฅธ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์ ์๋ค.
- ํ๋กํ์ผ๋ง: ๊ฐ๋ฐ ํ๊ฒฝ, ํ ์คํธ ํ๊ฒฝ, ํ๋ก๋์ ํ๊ฒฝ ๋ฑ ๋ค์ํ ํ๋กํ์ผ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ค์ ์ ์ ์ฉํ ์ ์๋ค.
- ์ฉ์ด -> [์ฉ์ด] ํ๋กํ์ผ, ํ๋กํ์ผ๋ง
DI ์ปจํ ์ด๋์ ์ฅ์
- ๊ฒฐํฉ๋ ๊ฐ์: ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋ฉฐ, ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ด ์ฆ๊ฐํ๋ค.
- ํ ์คํธ ์ฉ์ด์ฑ: ์์กด์ฑ์ด ์ธ๋ถ์์ ์ฃผ์ ๋๋ฏ๋ก, ๋จ์ ํ ์คํธ์์ ๋ชจ์ ๊ฐ์ฒด(Mock)๋ฅผ ์ฌ์ฉํ๊ธฐ ์ฝ๋ค.
- ์ ์ง๋ณด์์ฑ ํฅ์: ๊ฐ์ฒด ์์ฑ ๋ฐ ๊ด๋ฆฌ ๋ก์ง์ด ๋ถ๋ฆฌ๋๋ฏ๋ก, ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ค.
- ์ฝ๋์ ๊ฐ๋
์ฑ ํฅ์: ๊ฐ์ฒด ์์ฑ ๋ฐ ์์กด์ฑ ์ฃผ์
์ DI ์ปจํ
์ด๋์ ์์ํ๋ฏ๋ก, ์ฝ๋์ ๊ฐ๋
์ฑ์ด ํฅ์๋๋ค.
์๋๋ก์ด๋์์์ DI ์ปจํ ์ด๋
[๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ] - [Android] DI ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ฒฐ๋ก
DI ์ปจํ ์ด๋๋ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ ์ค์ฌ์ฃผ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ์๋๋ก์ด๋ ํ๊ฒฝ์์๋ Dagger 2, Hilt, Koin, Kodein ๋ฑ์ ๋ค์ํ DI ์ปจํ ์ด๋๋ฅผ ํ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋์ฑ ๊ตฌ์กฐ์ ์ด๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. DI ์ปจํ ์ด๋์ ์ ํ์ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ๊ณผ ๊ฐ๋ฐ์์ ์ ํธ๋์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ ๊ณ ๋ คํ์ฌ ์ ์ ํ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android]์กํฐ๋นํฐ์ ๋ฐ์น๋ชจ๋์ ํ๋๊ทธ์ ์ฐจ์ด (0) | 2024.07.30 |
---|---|
[DI]DI ์ปจํ ์ด๋์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ์์์ ๊ฐ์ ๋ฐฉ๋ฒ (0) | 2024.07.30 |
[JVM] ํด๋์ค ๋ก๋ฉ ์ง์ฐ ๋ฐ ํด๊ฒฐ ๋ฐฉ์ (0) | 2024.07.29 |
[Java][JVM][OOP] ์๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ + ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ง์ (0) | 2024.07.29 |
[Android] DI ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2024.07.29 |