Inversion of Control (μ μ΄μ μμ )
Inversion of Control
μ μ΄μ μμ (Inversion of Control
) -> IoCμ λν΄ μμ보μ.
μ μ΄
μ μ΄μ μλ―Έλ₯Ό μμ보μ.
ν ν΄λμ€μ λ©μλμμ λ€λ₯Έ ꡬν체μ μΈμ€ν΄μ€λ₯Ό λ§λ λ€κ³ ν΄λ³΄μ.
public class InstanceClass {
public void run(){
System.out.println("run!");
}
}
public class Test {
public static void setTest() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void main(String[] args){
setTest();
}
}
TestλΌλ ν΄λμ€μμ new μμ±μλ₯Ό μ΄μ©ν΄ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄μ£Όμλ€.
μ΄λ° μν©μ΄ Test ν΄λμ€μ setTest() λ©μλκ° InstanceClassλ₯Ό μ μ΄νκ³ μλ μν©μ΄λ€.
public class Test {
public static void setTest() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void setTest1() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void setTest2() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void setTest3() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.run();
}
public static void main(String[] args){
setTest();
setTest1();
setTest2();
setTest3();
}
}
λ§μ½μ μ΄λ° μμΌλ‘ μλ‘ λ€λ₯Έ λ©μλμμ new μμ±μλ₯Ό μ΄μ©ν΄ μΈμ€ν΄μ€λ₯Ό λ§λ λ€λ©΄ μλ‘ κ°μ μΈμ€ν΄μ€μΌκΉ?
λ΅μ μλ‘ λ€λ₯Έ μΈμ€ν΄μ€μ΄λ€.
κ° μ€ν μμμμ λ©μλκ° νΈμΆλκ³ κ·Έ μμμ μμ±μλ₯Ό μ΄μ©ν΄ heap μμμμ μΈμ€ν΄μ€κ° μμ±λλ€.
μ΄ heap μμμμ μμ±λ μΈμ€ν΄μ€λ μ€ν μμμ΄ μλ©Έν λ κ°λΉμ§ 컬λ ν°μ μν΄ κ°μ΄ μλ©Έλλ―λ‘, setTest,1,2,3μ μΈμ€ν΄μ€λ μλ‘ λ€λ₯Έ μΈμ€ν΄μ€μ΄λ€.
Spring IoC
DBμ μ κ·Όν΄μΌ νλ ν΄λμ€λ€, 컀λ₯μ
ν, μ€λ λ νκ³Ό κ°μ μμμ μ¬μ©ν΄μΌ νλ ν΄λμ€λ€μ΄ μΈμ€ν΄μ€λ₯Ό μ¬λ¬ λ² λ§λ€λ©΄, μμμ λλΉκ° λκ³ μμν μ μλ μ€λ₯κ° λ°μν μ μλ€.
μ΄μΈμλ μλ²μμ μ¬μ©λλ Service, Repository κ°μ²΄λ μ€λ³΅μΌλ‘ μ¬λ¬ λ² λ§λλ κ²λ³΄λ€ μΈμ€ν΄μ€λ₯Ό ν λ²λ§ μμ±ν΄μ κ΄λ¦¬νλ κ²μ΄ μμ μ μΈ λ°©λ²μ΄λ€.
Springμμλ Spring IoC(Inversion of Control
)μ λ°©μμ ν΅ν΄ μ΄λ¬ν κ΄λ¦¬λ₯Ό κ°λ₯νκ² ν΄μ€λ€.
μ¦, ν΄λμ€λ₯Ό μμ±νκ³ , μμ‘΄μ±μ μ£Όμ
ν΄ μ£Όλ μ μ΄λ₯Ό Spring μͺ½μΌλ‘ μμ μμΌ μ€νλ§μ΄ κ΄λ¦¬νλ κ²μ΄λ€.
μ€νλ§μ΄ μΈμν μ μλ μ΄λ
Έν
μ΄μ
(@Component, @Repository, @Service λ±λ±..)μ μ
λ ₯ν΄ μ£Όλ©΄ μ€νλ§μ΄ IoCλ‘ κ΄λ¦¬ν΄ μ€λ€.
μ΄λ μμ±λ μΈμ€ν΄μ€λ₯Ό μ±κΈν΄
μΌλ‘ κ΄λ¦¬ν΄ μ£Όλ―λ‘ ν΄λμ€κ° λ§λλ μΈμ€ν΄μ€λ€μ΄ μ€λ³΅λμ§ μκ³ , ν ꡬν체μ νμΈ μ€ν°λ₯Ό λ§λ€μ΄μ€μ κ΄λ¦¬νκ² λλ€.
κ·Έλ¬λ―λ‘ Spirngμ΄ μΈμν ꡬν체λ€μ΄ νλμ© heap μμμ λ§λ€μ΄μ Έμ κ΄λ¦¬λλ€.
μμ
import org.springframework.stereotype.Component;
@Component
public class InstanceClass {
public void run(){
System.out.println("run!");
}
}
import org.springframework.beans.factory.annotation.Autowired;
public class Test {
@Autowired
private InstanceClass instanceClass;
public void test(){
instanceClass.run();
}
}
IoCκ° μΈμν μ μκ² @Componentμ κ°μ μ΄λ
Έν
μ΄μ
μ λΆμ¬μ€λ€.
μ΄λ ν΄λμ€μ μμΉλ μ€νλ§ λΆνΈ λ©μΈ ν΄λμ€μ νμμ¬μΌ μ€νλ§ IoCκ° μΈμν μ μλ€.
IoCμ μ μ΄κ° μμ λ ꡬν체λ μμ κ°μ @Autowiredμ κ°μ λ°©λ²μΌλ‘ μ¬μ©ν μ μλ€.
λν μ΄ μΈμ€ν΄μ€λ μ±κΈν΄μΌλ‘ κ΄λ¦¬λλ λ¨ νλμ μΈμ€ν΄μ€λ€.