본문 바로가기
✍ 따뜻한 개발 공부

[Spring] DI의 장점이 무엇일까? / 인터페이스의 장점

by 따따시 2022. 8. 3.

 

 

🙄 Spring 에서 DI(Dependency Injection) 의존성 주입을 사용하는 이유는 무엇일까?

 

그동안(그 동안X) 개발 공부를 배워온 방식과 달리 쪼개기(?)를 시전하는 스프링 DI에

정신이 혼란스러웠는데, 오늘은 쪼개기가 왜 필요한 지 알 것만 같다. 

개인 프로젝트나 작은 프로젝트에서는 스프링 DI를 사용하는 것보다 그냥 일반적인 방법을 사용하는 것이 좋은데

대규모 프로젝트에서는 유지보수를 하기에 DI가 얼마나 편한지를 느낄 수 있다고 하셨당

 

예시를 들며 이해하니 확실히 더 와닿았음

 

AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX.xml");
Car car = ctx.getBean("car" , Car.class); // car이라는 id를 가진, 타입이 Car.class
car.use(); //car에 use라는 메소드가 있겠지?
ctx.close(); //꼭 마지막엔 닫아주기

 

내가 자동차를 만드는 데, 위처럼 코드를 짜놓았는데

만약 그동안 스포츠카만 내가 만들고 있었는데, 어느 날 고객이 봉고차를 만들어달라고 함.

그때 내가 위의 코드를 때려 뿌실필요없이

저 코드는 그대로 놔두면서, applicationCTX.xml 파일만 건드리면 되는 것

 

applicationCTX.xml 파일에 가보면

<bean id="car" class="com.warmcode.SportCar"/>

이라고 되있는 부분에, class 부분을 class="com.warmcode.BonggoCar" 로 클래스를 바꿔주면 되는 것

 

 

+) 😎 인터페이스가 이래서 중요하구나!

 

Car car = ctx.getBean("car" , car.class);

 

부분에서 car.class로 입력이 되어 있는데

applicationCTX.xml 에 보면 스포츠카, 봉고차, 버스 등 다양하겠지 차 종류가

근데 이 차 들도 인터페이스 car 로 묶여있으니, 맨 위의 자바 파일을 수정해줄 필요가 없는 것~~

 

예를 들어, 스포츠카 클래스에 가보면

public class SportCar implements Car {

@Override
public void use() {
	}
}

위처럼 Car.class를 오버라이드 하여 use메소드를 사용하고 있는 것.

 

+) Car.class 는 아래처럼 되어 있겠지

public interface Car {
 public void use();
}

 

 

아직은 미숙하지만, 언젠가 무릎을 탁 칠 날이 오길....✌

 

 

 

댓글