🙄 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();
}
아직은 미숙하지만, 언젠가 무릎을 탁 칠 날이 오길....✌
'✍ 따뜻한 개발 공부' 카테고리의 다른 글
[Spring] 예제 만들어보면서 AOP 구현 이해해보깅~ 😵💫 (0) | 2022.08.06 |
---|---|
[Spring] Environment객체 사용하지 않고 외부 프로퍼티 값 가져오기 / xml파일을 이용하는 방식과 java파일을 이용하는 방식 (0) | 2022.08.04 |
[JS] 자바 스크립트 연산자엔 어떤 게 있을까? / js의 비교 연산자 == 와 ===의 차이 (0) | 2022.07.31 |
[Servlet] Header의 정보는 어떻게 가져올까~? (0) | 2022.07.30 |
[Servlet] 3.0 이전 버전에서는 서블릿 mapping을 어떻게 해야할까? / WEB.xml에서 서블릿 맵핑하는 방법 (0) | 2022.07.29 |
댓글