1. 의존관계 변경
의존 관계에 있는 객체를 다른 객체로 교체해야 하는 경우가 있을 수 있다. 예를 들어, 자동차의 엔진을 A에서 B로 갈아야하는 경우가 이에 해당한다. 만약 Spring을 사용하지 않고 의존관계에 있는 객체를 변경하려면 Java 코드를 직접 수정해야 한다. 하지만 Spring을 사용하면 그럴 필요 없이 xml 파일만 수정하면 교체가 가능하다. 먼저 Engine 인터페이스, EngineA, EngineB 클래스는 다음과 같다.
# Engine 인터페이스
public interface Engine {
void sound();
}
# EngineA 클래스
public class EngineA implements Engine {
public EngineA() {
System.out.println("EngineA 생성");
}
@Override
public void sound() {
System.out.println("BAAAAAAAA!!!");
}
}
# EngineB 클래스
public class EngineB implements Engine{
public EngineB() {
System.out.println("EngineB 생성");
}
@Override
public void sound() {
System.out.println("BBBBBBBBB!!!");
}
}
이때 해당 클래스를 사용하는 Car 클래스는 다음과 같다.
# Car 클래스
public class Car {
private Engine engine;
public Car() {
System.out.println("생성자1로 Car 객체 생성");
}
public Car(Engine engine) {
System.out.println("생성자2로 Car 객체 생성");
this.engine = engine;
}
public void powerOn() {
System.out.println("시동 On");
engine.sound();
}
public void powerOff() {
System.out.println("시동 Off");
}
}
위와 같이 멤버변수와 매개변수 타입을 모두 interface인 Engine으로 설정하면 스프링 설정 파일을 수정하여 의존관계에 있는 객체를 쉽게 변경할 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="car" class="MyExam.Car">
<constructor-arg ref="engine"></constructor-arg>
</bean>
<bean id="engine" class="MyExam.EngineB"></bean>
</beans>
만약 EngineA를 쓰고 싶다면 class="MyExam.EngineB"부분에서 EngineB를 EngineA로 변경만 해주면 된다. 이와 같이 스프링을 사용하면 자바 코드를 변경하지 않아도 스프링 설정 파일만 변경하면 의존 관계의 객체들을 변경할 수 있다는 점을 꼭 기억하자.
'BackEnd > Spring' 카테고리의 다른 글
[Spring] Setter Injection 기본 사용법 (0) | 2023.04.28 |
---|---|
[Construction Injection] 다중 변수 매핑 (0) | 2023.04.28 |
[Spring] Constructor Injection 기본 사용법 (0) | 2023.04.27 |
[Spring] IoC, DL, DI 란? (0) | 2023.04.27 |
[Spring] XML 파일 설정 (태그 및 속성) (0) | 2023.04.27 |