7장 스프링 삼각형과 설정 정보 - 1
IoC: 제어의 역전 Inversion of Control
DI: 의존성 주입 Dependency Injection
자바에서 의존성이란?
- 전체가 부분에 의존한다
- 프로그래밍에서 의존 관계는 new로 표현된다
집합관계: 부분과 전체가 다른 생명 주기를 가질 수 있음 (집 vs 냉장고)
구성관계: 부분과 전체가 같은 생명주기를 갖는다 (사람 vs 심장)
주입... -> 외부에서 만들어진 것을 장착 하는것
스프링 없이 의존성 주입하기
1. 생성자를 통한 의존성 주입
// 운전자가 타이어를 생산한다
// 운전자가 자동차를 생산하면서 타이어를 장착한다
Tire tire = new KoreaTire();
Car car = new Car(tire);
기존방식: Car는 다른것들에 대해 정확히 알고 있어야만 그에 해당하는 객체 생성 가능
의존성 주입 적용: Tire 인터페이스를 구현한 객체가 들어오기만 하면 작동O
확장성 좋음 -> 나중에 새로운 타이어가 생겨도 그것들이 Tire인페를 구현하면 Car는 변경 필요X
기존 코드는 재컴파일 및 재배포 필요X
현실 세계에서의 표준 규격 준수(like 병뚜껑) = 프로그래밍 세계의 인터페이스 구현
서로 뚜껑 바꿔도 잘 맞아서 바로 사용 가능
2. 속성을 통한 의존성 주입 - 속성 접근자 메서드 사용
// 운전자가 타이어를 생산한다
// 운전자가 자동차를 생산한다
// 운전자가 자동차에 타이어를 장착한다
Tire tire = new KoreaTire();
Car car = new Car();
car.setTire(tire);
생성자 사용시... 자동차 생성시에만 타이어 장착 가능 -> 교체 불가
내가 원할때 교체하려면 -> 속성을 통한 의존성 주입!
스프링을 통한 의존성 주입
1. XML 파일 사용 - 속성 메서드 사용 ??? 이해가 안됨
// 운전자가 쇼핑몰에서 타이어를 구매한다.
// 운전자가 쇼핑몰에서 자동차를 구매한다.
// 운전자가 자동차에 타이어를 장착한다.
ApplicationContext context = new ClassPathXmlApplicationContext("package01.xml", Driver.class);
Tire tire = (Tire)Context.getBean("tire");
Car car = (Car)context.getBean("car");
car.setTire(tire);
쇼핑몰 -----> 스프링 프레임워크!!
package01.xml 에는... (패키지 이름임)
구매 가능한 상품 목록이 등록되어야 함! -> bean 태그를 이용해 등록
class = 어떤 클래스를 통해 생산(인스턴스화) 할지 나타냄
// package01.xml 파일
생략
<bean id="tire" class="package01.KoreaTire"></bean>
<bean id="americaTire" class="package01.AmericaTire"></bean>
<bean id="car" class="package01.Car"></bean>
</beans>
장점: 타이어 변경할 때 재컴파일/재배포X -> xml 파일만 수정하면 됨
2. 스프링 설정 파일(XML)에서 속성 주입
3. @Autowired를 통한 속성 주입
4. @Resource를 통한 속성 주입