-
의존성 주입 Dependency Injection. DIJava/SpringBoot 2021. 2. 24. 16:12
클래스 의존 관계란?
한 클래스의 객체가 다른 클래스 객체의 서비스를 필요로 하는 관계.
Driver 가 Car를 운전한다.
Driver.java
public class Driver{
Car car;
public Driver(){
car = new Car();
}
public void drive(){
car.engineOn();
car.go();
car.engineOff();
}
}Car.java
public class Car{
public void engineOn(){
System.out.println("car: engine on");
}
public void go(){
System.out.println("car: brrrr");
}
public void engineOff(){
System.out.println("car: engine off");
}
}위의 경우에 Car가 Plane으로 바뀌면 모든 코드를 수정해야 한다.
클래스간의 의존성을 줄이기 위해서 Movable이라는 interface를 사용했다.
public interface movable{
public void engineOn();
public void drive();
public void engineOff();
}의존성 주입(Dependency Injection)
이제 이동수단(Car, Plane)에 따라 변경해야 하는 코드가 훨씬 줄어든다.
하지만 외부에서 생성한 객체를 주입해줘야 한다.
의존성 주입은 1) 생성자를 통해서 2) setter를 통해서 할 수 있다.
1. 생성자를 통한 의존성 주입
public class Driver{
private Movable m;
public Driver(Movable m){
this.m=m;
}
public void drive(){
m.engineOn();
m.drive();
m.engineOff();
}
}2. setter를 통한 의존성 주입
public class Driver{
private Movable m;
public void setMovable(Movable m){
this.m = m;
}
public void drive(){
m.engineOn();
m.drive();
m.engineOff();
}
}코드에서의 객체 생성, 주입
Main.java
public class Main{
public static void main(String[] args){
Driver d = new Driver();
Movable m = new Car();
d.setMovable(m);
d.drive();
}
}public class Main{
public static void main(String[] args){
Driver d = new Driver();
Movable m = new Plane(); //변경
d.setMovable(m);
d.drive();
}
}코드에서 객체를 주입하는 경우에는 Car에서 Plane으로 바뀔 경우 코드도 바뀌어야 한다.
IoC
어플리케이션 스스로가 자신이 사용할 객체의 생성 및 주입에 전혀 관여하지 않고 프레임워크가 대신 해주는 것을 IoC(Inversion of Control) 이라고 한다.
다음 시간엔 스프링에서의 IoC에 대해 알아보자
'Java > SpringBoot' 카테고리의 다른 글
API 예외 처리 (0) 2022.08.18 파일 업로드 (0) 2022.08.18 타입 컨버터 (0) 2022.08.18 예외 처리와 오류 페이지 (0) 2022.08.18 [Thymeleaf] 문법 정리 (0) 2021.01.18