운전자가 자동차를 생산한다.
자동차는 내부적으로 타이어를 생산한다.
new Car();
Car 객체 생성자에서 new Tire();
의존성은 new이다.
new를 실행하는 Car와 Tire 사이에서 Car가 Tire에 의존한다.
운전자가 타이어를 생산한다.
운전자가 자동차를 생산하면서 타이어를 장착한다.
Tire tire = new KoreaTire();
Car car = new Car(tire);
주입이란 말은 외부에서라는 뜻을 내포하고 있는 단어.
즉, 자동차 내부에서 타이어를 생산하는 것이 아니라
외부에서 생산된 타이어를 자동차에 장착하는 작업이 주입이다.
운전자가 타이어를 생산한다.
운전자가 자동차를 생산한다.
운전자가 자동차에 타이어를 장착한다.
Tire tire = new KoreaTire();
Car car = new Car();
car.setTire(tire);
생성자를 통해 의존성을 주입하는것보다 코드의 유연성이 좋다.
운전자가 종합 쇼핑몰에서 타이어를 구매한다.
운전자가 종합 쇼핑몰에서 자동차를 구매한다.
운전자가 자동차에 타이어를 장착한다.
ApplicationContext context = new ClassPathXmlApplicationContext("expert002.xml", Driver.class);
Tire tire = (Tire)context.getBean("tire");
Car car = (Car)context.getBean("car");
car.setTire(tire);
재컴파일 없이, xml파일만 수정하면 프로그램의 실행 결과를 바꿀 수 있다.
운전자가 종합쇼핑몰에서 자동차를 구매 요청한다.
종합 쇼핑몰은 자동차를 생산한다.
종합 쇼핑몰은 타이어를 생산한다.
종합 쇼핑몰은 자동차에 타이어를 장착한다.
종합 쇼핑몰은 운전자에게 자동차를 전달한다.
ApplicationContext context = new ClassPathXmlApplicationContext("expert003/expert003.xml");
Car car = context.getBean("Car", Car.class);
<bean id="koreaTire" class="expert003.KoreaTire"></bean>
<bean id="americaTire" class="expert003.americaTire"></bean>
<bean id="car" class="expert003.Car">
<property name="tire" ref="koreaTire"></*bean>
운전자가 종합쇼핑몰에서 자동차를 구매 요청한다.
종합 쇼핑몰은 자동차를 생산한다.
종합 쇼핑몰은 타이어를 생산한다.
종합 쇼핑몰은 자동차에 타이어를 장착한다.
종합 쇼핑몰은 운전자에게 자동차를 전달한다.