μΆμ²
ChatGPT
μμ‘΄μ± μ£Όμ (Dependency Injection, DI)μμλ μμ±μ μ£Όμ κ³Ό μΈν° μ£Όμ μ΄ κ°μ₯ μΌλ°μ μΈ λ°©λ²μ΄λ€. μ΄ λ κ°μ§ λ°©λ²μ κ°κ°μ μ₯λ¨μ μ΄ μμΌλ©°, μν©μ λ°λΌ μ μ ν λ°©λ²μ μ ννλ κ²μ΄ μ€μνλ€. μ΄λ€ λ°©λ²μ΄ λ μ νΈλλμ§λ κ°λ° μν©μ΄λ νλ‘μ νΈμ μꡬ μ¬νμ λ°λΌ λ€λ₯Ό μ μμ§λ§, μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ μ΄μ λ‘ μμ±μ μ£Όμ μ΄ λ μ νΈλλ€.
μμ±μ μ£Όμ
Constructor Injection
μ₯μ
1. λΆλ³μ± 보μ₯
κ°μ²΄κ° μμ±λ λ λͺ¨λ μμ‘΄μ±μ΄ μ£Όμ λλ―λ‘, κ°μ²΄μ μνκ° λΆλ³νκ² μ μ§λλ€. μ΄λ μ€λ λ μμ μ±κ³Ό κ΄λ ¨λ λ¬Έμ λ₯Ό μ€μΌ μ μλ€.
2. λͺ νν μμ‘΄μ± νν
ν΄λμ€μ μμ±μλ₯Ό ν΅ν΄ νμν λͺ¨λ μμ‘΄μ±μ λͺ νν μ μ μλ€. μ΄λ ν΄λμ€κ° νμλ‘ νλ λͺ¨λ μμ‘΄μ±μ λͺ μμ μΌλ‘ μ리λ λ° λμμ΄ λ©λλ€.
3. νμ μμ‘΄μ± μ£Όμ κ°μ
μμ±μλ₯Ό μ¬μ©νλ©΄ νμ μμ‘΄μ±μ λ°λμ μ£Όμ νλλ‘ κ°μ ν μ μλ€. μμ‘΄μ±μ΄ μμΌλ©΄ κ°μ²΄κ° μμ±λμ§ μκΈ° λλ¬Έμ λ°νμ μλ¬λ₯Ό μ»΄νμΌ νμ μλ¬λ‘ μ νν μ μμ΅λλ€.
4. ν μ€νΈ μ©μ΄μ±
μμ‘΄μ±μ΄ λͺ ννλ―λ‘ λ¨μ ν μ€νΈ μ Mockingμ΄ μ©μ΄νλ€. ν μ€νΈμμ μ½κ² μμ‘΄μ±μ μ£Όμ νκ³ κ°μ²΄μ νλμ κ²μ¦ν μ μλ€.
5. μν μμ‘΄μ± λ°©μ§
μμ±μ μ£Όμ μ μν μμ‘΄μ±μ νΌνλ λ° λμμ΄ λλ€. μν μμ‘΄μ±μ΄ μ‘΄μ¬νλ©΄ κ°μ²΄κ° μμ±λ μ μκΈ° λλ¬Έμ λ¬Έμ κ° μ‘°κΈ°μ λ°κ²¬λλ€.
λ¨μ
1. μμ‘΄μ± μ μ¦κ° μ 볡μ‘μ± μ¦κ°
νμν μμ‘΄μ±μ΄ λ§μ κ²½μ° μμ±μμ νλΌλ―Έν° μκ° μ¦κ°ν μ μμ΄ λ³΅μ‘ν΄μ§ μ μλ€. μ΄λ‘ μΈν΄ κ°λ μ±μ΄ λ¨μ΄μ§ μ μλ€.
2. μμ‘΄μ± λ³κ²½μ μ΄λ €μ
κ°μ²΄κ° μμ±λ μ΄νμλ μμ‘΄μ±μ λ³κ²½ν μ μλ€. λ§μ½ μμ‘΄μ±μ λμ μΌλ‘ λ³κ²½ν΄μΌ νλ κ²½μ°λΌλ©΄ μ μ½μ΄ λ μ μλ€.
μΈν° μ£Όμ
Setter Injection
μ₯μ
1. μ μ°μ±
κ°μ²΄κ° μμ±λ μ΄νμλ μμ‘΄μ±μ λ³κ²½ν μ μμΌλ―λ‘, μμ‘΄μ±μ΄ κ°λ³μ μ΄κ±°λ μ΅μ μΌ λ μ μ©νλ€. μ΄λ₯Ό ν΅ν΄ λμ μΈ μμ‘΄μ± μ£Όμ μ΄ κ°λ₯νλ€.
2. κ°λ μ±
μ μ μμ μμ‘΄μ±μ μ£Όμ ν λ, μ½λκ° κ°κ²°νκ³ κ°λ μ±μ΄ μ’λ€. μμ±μμ λΉν΄ λ©μλμ μ μΈμ΄ κ°λ¨νλ€.
3. μ νμ μμ‘΄μ±
μΌλΆ μμ‘΄μ±μ΄ μ νμ μ΄κ±°λ κΈ°λ³Έκ°μ΄ μλ κ²½μ°, μΈν° μ£Όμ μ ν΅ν΄ μ΄λ₯Ό μ€μ ν μ μλ€. μ΄λ₯Ό ν΅ν΄ μ μ°ν ꡬμ±μ΄ κ°λ₯νλ€.
λ¨μ
1. λΆμμ ν μν κ°λ₯μ±
κ°μ²΄κ° μμ ν μ΄κΈ°νλκΈ° μ μ μ¬μ©ν κ²½μ° λ°νμ μ€λ₯κ° λ°μν μ μλ€. μ΄λ νμ μμ‘΄μ±μ λλ½μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
2. μμ λ¬Έμ
μ£Όμ μμκ° μ€μν κ²½μ°, μλͺ»λ μμλ‘ μ£Όμ νμ¬ λ¬Έμ λ₯Ό μΌμΌν¬ μ μλ€. μ΄λ κ°μ²΄μ μΌκ΄μ±μ ν΄μΉ μ μλ μμΈμ λλ€.
3. ν μ€νΈμ 볡μ‘μ±
κ°μ²΄μ μνκ° λ³ν μ μκΈ° λλ¬Έμ ν μ€νΈκ° 볡μ‘ν΄μ§ μ μμ΅λλ€. μ΄λ κ°μ²΄μ μν λ³νλ₯Ό μΆμ ν΄μΌ νλ λ¬Έμ λ₯Ό μΌκΈ°ν©λλ€.
λΉκ΅ λ° κΆμ₯ μ¬ν
- μμ±μ μ£Όμ μ λΆλ³μ±κ³Ό λͺ νν μμ‘΄μ±μ 보μ₯νκΈ° λλ¬Έμ μΌλ°μ μΌλ‘ μ νΈλλ€.
- μΈν° μ£Όμ μ μ μ°μ±μ μ 곡νλ―λ‘, μμ‘΄μ±μ΄ μ νμ μ΄κ±°λ λ³κ²½ κ°λ₯ν κ²½μ°μ μ μ©νλ€.
- μμ‘΄μ±μ΄ νμμ μΈ κ²½μ° μμ±μ μ£Όμ μ, μμ‘΄μ±μ΄ μ νμ μ΄κ±°λ μ΄κΈ°ν ν λ³κ²½ κ°λ₯ν΄μΌ νλ κ²½μ° μΈν° μ£Όμ μ κ³ λ €ν μ μλ€.
μμ μ½λ
Java μμ
// μμ±μ μ£Όμ
μμ
public class Car {
private final Engine engine;
// μμ±μλ₯Ό ν΅ν μμ‘΄μ± μ£Όμ
public Car(Engine engine) {
this.engine = engine;
}
public void start() {
engine.start();
}
}
// μΈν° μ£Όμ
μμ
public class Car {
private Engine engine;
// μΈν°λ₯Ό ν΅ν μμ‘΄μ± μ£Όμ
public void setEngine(Engine engine) {
this.engine = engine;
}
public void start() {
if (engine == null) {
throw new IllegalStateException("Engine not set");
}
engine.start();
}
}
Kotlin μμ
// μμ±μ μ£Όμ
μμ
class Car(private val engine: Engine) {
fun start() {
engine.start()
}
}
// μΈν° μ£Όμ
μμ
class Car {
private var engine: Engine? = null
// μΈν°λ₯Ό ν΅ν μμ‘΄μ± μ£Όμ
fun setEngine(engine: Engine) {
this.engine = engine
}
fun start() {
engine?.start() ?: throw IllegalStateException("Engine not set")
}
}
κ²°λ‘
μμ±μ μ£Όμ
κ³Ό μΈν° μ£Όμ
μ€ μ΄λ€ κ²μ μ νν μ§λ νλ‘μ νΈμ μꡬ μ¬νκ³Ό μ½λμ νΉμ±μ λ°λΌ λ¬λΌμ§ μ μλ€. νμ§λ§ λλΆλΆμ κ²½μ° μμ±μ μ£Όμ
μ΄ κΆμ₯λλ€. μ΄λ κ°μ²΄μ μνλ₯Ό μ΄κΈ°λΆν° λͺ
ννκ² μ μνκ³ , λΆνμν μν λ³νλ₯Ό λ°©μ§ν μ μκΈ° λλ¬Έμ΄λ€.