목차
- DI(Dependency Injection)란?
- 스프링 DI 설정 방법
- 스프링 DI 예시
- 다양한 의존 객체 주입 방법
DI(Dependency Injection)란?
다음 세 가지 경우 다 DI라고 할 수 있다.
다만, 조금씩의 차이가 있다.
- 배터리 일체형 : 생성자에서 객체를 주입
- 배터리 분리형(1) : setter를 사용해서 객체를 주입
- 배터리 분리형(1) : 생성자, setter를 사용해서 객체를 주입
# 배터리 일체형
public class EletronicCarToy {
private Battery battery;
public ElectronicCarToy() {
battery = new NormalBattery();
}
}
# 배터리 분리형(1)
public class EletronicRobotToy {
private Battery battery;
public EletronicRobotToy() {
}
//배터리가 떨어졌을 경우 새 배터리 넣을 수 있음
public void setBattery(Battery battery) {
this.battery = battery
}
}
# 배터리 분리형(2)
public class EletronicRobotToy {
private Battery battery;
public EletronicRobotToy() {
//공장에서 만들 때 새 배터리 넣어줌
this.battery = battery
}
//배터리가 떨어졌을 경우 새 배터리 넣을 수 있음
public void setBattery(Battery battery) {
this.battery = battery
}
}
스프링 DI설정 방법
스프링 DI 예시
toy01 패키지
//MainClass.java
package toy01;
import toy01.type.*;
public class MainClass {
public static void main(String[] args) {
ElectronicCarToy carToy = new ElectronicCarToy();
ElectronicRobotToy robotToy = new ElectronicRobotToy();
}
}
toy01.battery 패키지
// Battery.java
package toy01.battery;
public interface Battery {
public int getBatteryValue();
}
//ChargeBattery.java
package toy01.battery;
public class ChargeBattery implements Battery {
@Override
public int getBatteryValue() {
return 0;
}
}
//NormalBattery.java
package toy01.battery;
public class NormalBattery implements Battery {
@Override
public int getBatteryValue() {
return 0;
}
}
배터리를 interface로 사용한 이유? ☞ 유동성있게 객체를 사용하기 위함!
toy01.toy 패키지
//ElectronicCarToy.java
package toy01.type;
import toy01.battery.Battery;
public class ElectronicCarToy {
private Battery battery;
public ElectronicCarToy() {
this.battery = battery; // 생성자에서 객체 주입
}
}
//ElectronicRadioToy.java
package toy01.type;
import toy01.battery.Battery;
public class ElectronicRadioToy {
private Battery battery;
public ElectronicRadioToy() {
this.battery = battery; //생성자를 사용해서 객체를 주입
}
public void setBattery(Battery battery) {
this.battery = battery; //setter를 사용해서 객체를 주입
}
}
//ElectronicRobotToy.java
package toy01.type;
import toy01.battery.Battery;
public class ElectronicRobotToy {
private Battery battery;
public ElectronicRobotToy() {
}
public void setBattery(Battery battery) {
this.battery = battery; //setter를 사용해서 객체를 주입
}
}
+) 객체를 new로 생성하는 것이 아닌, 빈(bean) 객체로 생성한다면 더욱 스프링다운 DI 방법이다.
다양한 의존 객체 주입 방법
1) 생성자를 이용한 DI
<constructor-arg> : 생성자에 값 주입 (ref)
2) setter를 이용한 DI
<property> : 생성자에 값 주입 (name, value)
3) List타입 DI
<property> : 생성자에 값 주입 (name, list 형태의 value)
4) Map타입 DI
<property> : 생성자에 값 주입 (name, map형태의 value)
'💻WEB BackEnd > 프레임워크 Spring' 카테고리의 다른 글
의존 객체 자동 주입 (0) | 2022.11.04 |
---|---|
프로젝트 생성 - (방법2)로컬에서 직접 생성 (0) | 2022.11.01 |
객체 생성 - (방법2) 컨테이너를 통해 객체 생성 (0) | 2022.11.01 |
객체 생성 - (방법1) new연산자를 이용 (0) | 2022.11.01 |
자주 쓰이는 이클립스 단축키 (0) | 2022.11.01 |