[TIL] 2020.08.15_TIL

TO_DO

  • [최종프로젝트] ppt 템플릿 완성
  • [최종프로젝트] 제안서 ppt 작성
  • [최종프로젝트] 은행 앱/웹 swot 분석
  • [복습] 스프링 수업 전체복습

스프링 복습

DI(Dependency Injection) 개념

DI는 의존성을 주입시켜준다는 것을 의미한다. 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입을 시켜주는 방식이다.

A객체에서 B, C 객체를 이용할 때에는 두가지 방법이 있다.

  • 방법 1) A객체가 B와 C객체를 New생성자를 통해서 직접 생성하는 방법
  • 방법 2) 외부에서 생성된 객체를 setter( )나 생성자를 통해 사용하는 방법

Spring

방법1 - New 생성자를 통해서 직접 생성


  • 고객(actor)가 자동차를 주문하면 자동차 회사는 한국타이어와 금호타이어 중에서 하나의 브랜드를 장착해서 출고시킨다고 가정하자.

Spring

[ 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 "금호타이어";
	}
}

태그: ,

카테고리:

업데이트:

댓글남기기