DI 확인하기

최준영·2021년 9월 27일
0
post-custom-banner

DI, 의존성 주입 확인하기


  • Car와 Engine이라는 두개의 클래스를 생성한다.

1. spring 사용 x

Engine.java

package kr.or.connect.diexam01;

public class Engine {
	public Engine() {
		System.out.println("Engine 생성자");
	}
	
	public void exec() {
		System.out.println("엔진이 동작합니다.");
	}
}

Car.java

package kr.or.connect.diexam01;

public class Car {
	Engine v8;
	
	public Car() {
		System.out.println("Car 생성자");
	}
	
	public void setEngine(Engine e) {
		this.v8 = e;
	}
	
	public void run() {
		System.out.println("엔진을 이용하여 달립니다.");
		v8.exec();
	}
    
    public static void main(String[] args) {
      Engine e = new Engine();
      Car c = new Car();
      c.setEngine(e);
      c.run();
    }
}
  • spring을 사용하지 않는다면 우리는 Engine와 Car 클래스를 구현하고 new를 사용하여 객체를 생성한 후에야 해당 인스턴스를 사용할 수 있다.
  • spring ioc 컨테이너가 이 역할을 해줄 수 있고 그러기 위해서는 해당 bean들을 먼저 등록해야한다.

2. Spring 사용 O

applicationContext.xml에 해당 코드 추가

  <bean id="e" class="kr.or.connect.diexam01.Engine"/>
  <bean id="c" class="kr.or.connect.diexam01.Car">
    <property name="engine" ref="e"></property>
  </bean>
  • 프로퍼티는 setter, getter 메서드 중에 하나를 의미한다. 즉, name이 engine인 property는 setEngine, getEngine을 의미한다.
  • 하지만 bean 태그 내에서는 값을 설정하는 것이기 때문에 setEngime을 의미한다. 파라미터로는 Engine 타입인 e를 받는 것이다.
  • 이처럼 어떤 객체에게 객체를 주입하는 것을 DI라고 한다.

ApplicationContextExam02.java

public class ApplicationContextExam02 {

	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext( 
				"classpath:applicationContext.xml"); 

		Car car = (Car)ac.getBean("car");
		car.run();
		
	}
}
  • 실행클래스의 코드에는 엔진이 없다. 우리는 car만 사용할 줄 알면 된다.
  • 스프링 버전이 올라가면서 빈대신 더 편리한 자바 config와 어노테이션을 사용한다.
profile
do for me
post-custom-banner

0개의 댓글