지금까지 DI가 뭔지 살펴봤습니다.
그렇다면 실제 코드를 보면서 의존성 문제를 외부 주입으로 해결할 때 장점을 살펴봅시다.
외부 주입없이 코드를 짠다고 했을 때 어떤 문제가 생길까요?
public class GasEngine {
public void start() {
System.out.println("Gas engine starts.");
}
}
public class ElectricEngine {
public void start() {
System.out.println("Electric engine starts.");
}
}
public class GasCar {
private GasEngine engine;
public GasCar() {
this.engine = new GasEngine(); // GasEngine에 직접적으로 의존하고 있음
}
public void startEngine() {
engine.start();
}
}
public class ElectricCar {
private ElectricEngine engine;
public ElectricCar() {
this.engine = new ElectricEngine(); // ElectricEngine에 직접적으로 의존하고 있음
}
public void startEngine() {
engine.start();
}
}
외부 주입을 하지 않고 엔진을 종류별로 만들려면 각자의 클래스가 무한대로 필요하게 될것입니다.
하지만 외부주입을 할 수 있다면?
public interface Engine {
void start();
}
public class GasEngine implements Engine {
@Override
public void start() {
System.out.println("Gas engine starts.");
}
}
public class ElectricEngine implements Engine {
@Override
public void start() {
System.out.println("Electric engine starts.");
}
}
public class Car {
private Engine engine;
public Car(Engine engine) { // DI를 통해 의존성 주입
this.engine = engine;
}
public void startEngine() {
engine.start();
}
}
public class Main {
public static void main(String[] args) {
Engine gasEngine = new GasEngine();
Car gasCar = new Car(gasEngine);
gasCar.startEngine(); // "Gas engine starts."
Engine electricEngine = new ElectricEngine();
Car electricCar = new Car(electricEngine);
electricCar.startEngine(); // "Electric engine starts."
}
}
Car에 대한 Class를 하나로 해결할 수 있게됩니다.
메인 메서드에서 필요한 엔진을 Car에 넣어서 만들 수 있게됩니다.
무제한으로 늘어나야하는 클래스를 줄일 수 있는 것입니다.
이렇게된다면 중복되는 코드도 줄일 수 있고
Car클래스를 재활용하기 때문에 코드의 효율도 높일 수 있습니다.
만약 스마트팩토리 자동차 공장에서 DI없이 자동차를 만들어야하는 코드를 작성한다고 생각하면 개발자가 얼마나 하드코딩을 해야하는 것일까요? 하지만 우리는 DI를 통해 이 문제를 쉽게 해결할 수 있습니다.
'파이널 프로젝트' 카테고리의 다른 글
검색의 질 향상시키기 (0) | 2023.04.13 |
---|---|
[트러블슈팅] 영어제목 검색 속도 향상시키기 (1) | 2023.04.12 |
[트러블슈팅] 통합검색에 대한 고찰 (1) | 2023.04.12 |
[트러블슈팅] ISBN 검색속도 저하 문제 (0) | 2023.04.12 |
[CS] 스레드에 대한 고찰 (1) | 2023.04.12 |