스프링 프레임워크의 3가지 핵심 프로그래밍 모델 중 하나인 IoC/DI에 대해 알아보도록 하자.
IoC 컨테이너
라고도 부른다.new
라는 키워드를 사용하여 생성할 수 있다.Tire.java
public interface Tire {
String getBrand();
}
KoreaTire.java
public class KoreaTire implements Tire {
public String getBrand() {
return "한국 타이어";
}
}
AmericaTire.java
public class AmericaTrie implements Tire {
public String getBrand() {
return "미국 타이어";
}
}
생산(주입)
할 수 있는데Car.java
public class Car {
Tire tire;
// 생성자
public Car() {
tire = new KoreaTire(); // new 키워드를 통해 의존 관계 생성
}
public String getTrieBrand() {
return "정착된 타이어: " + tire.getBrand();
}
}
생산(주입)
할 수 있다.Driver.java
public class Driver {
public static void main(String[] args) {
Car car = new Car();
System.out.println(car.getTrieBrand());
}
}
생산(주입)
했으니, Car 클래스의 생산자 코드의 변경이 필요할 것이다.public class Car {
Tire tire;
public Car() {
tire = new AmericaTire(); // 변경
}
...
}
수정된 Car.java
public class Car {
Tire tire;
// 변경
public Car(Tire tire) {
this.tire = tire;
}
public String getTrieBrand() {
return "정착된 타이어: " + tire.getBrand();
}
}
수정된 Driver.java
public class Driver {
public static void main(String[] args) {
// 변경
Tire tire = new AmericaTire();
Car car = new Car(tire);
System.out.println(car.getTrieBrand());
}
}
IoC 컨테이너
라는 개념을 사용한다. 컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것이라 할 수 있다.Bean
이라고 한다. 이는 기본적으로 싱글톤(singleton)
으로 관리한다.https://steady-coding.tistory.com/600
https://leveloper.tistory.com/33
https://mangkyu.tistory.com/150
김종민, [스프링 입문을 위한 자바 객체 지향의 원리와 이해]