카테고리 없음

7장 스프링 삼각형과 설정 정보 - 1

아놀드금자 2023. 6. 25. 23:31
728x90

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를 통한 속성 주입

728x90