[TIL] 2020.08.15_TIL
TO_DO
- [최종프로젝트] ppt 템플릿 완성
- [최종프로젝트] 제안서 ppt 작성
- [최종프로젝트] 은행 앱/웹 swot 분석
- [복습] 스프링 수업 전체복습
스프링 복습
DI(Dependency Injection) 개념
DI는 의존성을 주입시켜준다는 것을 의미한다. 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입을 시켜주는 방식이다.
A객체에서 B, C 객체를 이용할 때에는 두가지 방법이 있다.
- 방법 1) A객체가 B와 C객체를 New생성자를 통해서 직접 생성하는 방법
- 방법 2) 외부에서 생성된 객체를 setter( )나 생성자를 통해 사용하는 방법
방법1 - New 생성자를 통해서 직접 생성
- 고객(actor)가 자동차를 주문하면 자동차 회사는 한국타이어와 금호타이어 중에서 하나의 브랜드를 장착해서 출고시킨다고 가정하자.
[ DriverMain.java ]
package di.basic.n01;
public class DriverMain {
public static void main(String[] args) {
Car car = new Car(); // 객체를 직접 생성
car.prnTireBrand(); // 타이어를 장착하는 메소드
}
}
[ Car.java ]
package di.basic.n01;
public class Car {
private Tire tire;
// 금호타이어와 한국타이어 중에서 타이어 브랜드를 결정한다.
public Car() {
//tire = new KumhoTire(); // 금호타이어를 장착
tire = new HankookTire(); // 한국타이어를 장착
}
// 장착한 타이어브랜드를 출력하는 메소드
public void prnTireBrand() {
System.out.println("장착된 타이어 : " + tire.getBrand());
}
}
[ Tire.java]
- Tire 인터페이스
package di.basic.n01;
public interface Tire {
public String getBrand();
}
[ HankookTire.java ]
- Tire 인터페이스를 상속받는 한국타이어 객체
package di.basic.n01;
public class HankookTire implements Tire{
public String getBrand() {
return "한국타이어";
}
}
[ KumhoTire.java ]
- Tire 인터페이스를 상속받는 금호타이어 객체
package di.basic.n01;
public class KumhoTire implements Tire{
public String getBrand() {
return "금호타이어";
}
}
방법2. 외부에서 생성된 객체를 setter( )나 생성자를 통해 사용
- 두번째 방법은 A객체에서 직접 생성하지 않고, 외부에서 생성된 객체를 생성자 혹은 setter( )를 이용해서 사용한다.
- 외부에서 생성된 객체를 사용하는 것을 스프링에서는 주입한다라고 한다.(DI)
-
A라는 객체에서 B, C객체를 사용할 때 A객체에서 직접 생성을 하는 것이 아닌 외부(IOC컨테이너)에서 생성된 B, C객체를 조립(주입)시켜 setter 혹은 생성자를 통해 사용한다.
- 주의 : Spring의 기본적인 방법인 bean을 만들지 않고, 방법1 과 방법2의 차이점을 보여주기 위한 예제이다.
[ DriverMain.java ]
package di.basic.n02;
public class DriverMain {
public static void main(String[] args) {
Tire tire = new HankookTire();
// 1. 생성자 주입
Car car = new Car(tire);
car.prnTireBrand();
// 2. 속성 주입
Car car = new Car();
car.setTire(tire);
car.prnTireBrand();
}
}
[ Car.java ]
package di.basic.n02;
public class Car {
private Tire tire;
// 1. 생성자 주입(Constructor Injection)
public Car(Tire tire) {
this.tire = tire;
}
public void prnTireBrand() {
System.out.println("장착된 타이어(생성자주입) : " + tire.getBrand());
}
// 2. 속성주입(setter Injection)
public void setTire(Tire tire) {
this.tire = tire;
}
public void prnTireBrand() {
System.out.println("장착된 타이어(속성주입) : " + tire.getBrand());
}
}
[ Tire.java ]
package di.basic.n02;
public interface Tire {
public String getBrand();
}
[ HankookTire.java ]
package di.basic.n02;
public class HankookTire implements Tire{
public String getBrand() {
return "한국타이어";
}
}
[ KumhoTire.java ]
package di.basic.n02;
public class KumhoTire implements Tire{
public String getBrand() {
return "금호타이어";
}
}
댓글남기기