🔥 Vamos/Spring

0121 | 스프링의 정석 :: 3-7(SPRING DI 이론 3)

unikue 2023. 1. 21. 16:51

 

 

0121 | 스프링의 정석 :: 3-6 (SPRING DI 이론 2)

0120 | 스프링의 정석 :: 3-5 (SPRING DI 이론 1) SPRING DI 이론 1 1. bean이란? [복잡] Java Beans - 재사용 가능한 컴포넌트, 상태 (iv), getter & setter, no-args constructor 👇 [간단] Servlet & JSP bean - MVC의 Model (데이터

ala-nueva.tistory.com


 

6. IoC와 DI

 

✔ IoC (Inversion of Control) inverts the flow of control as compared to the traditional control flow

: 제어의 역전

: 제어의 흐름을 전통적인 방식과 다르게 뒤바꾸는 것 

: 전통적인 방식은 사용자 코드가 Framework코드를 호출한다면, IoC는 변하는코드/변하지않는 코드를 분리하여 Framework 코드가 사용자 코드를 호출한다.

: if, for 문같은 실행 흐름이 바뀜

 

DI (Dependency Injection) - the passing of a dependency into the client that uses it

: 의존성 주입.: 사용할 객체를 외부에서 주입 받는 것

Car car = new Car();
car.drive(new SuperEngine());

void drive(Engine engine){ // engine이 superEngine()을 호출
engine.start();
}

 


 

7. 스프링 애너테이션 - @Autowired

 

: 인스턴스변수 (iv), setter, 참조형 매개변수를 가진 생성자, 메서드에 적용

: 생성자는  Autowired생략가능. 없어도 주입해준다.

: Spring container에서 타입으로 빈을 검색해서 참조변수에 자동 주입 (DI)
: 검색된 빈이 n개이면, 그 중에 참조변수와 이름이 일치하는 것을 주입.

 

👉 주입 대상이 변수일때, 검색된 빈이 1개 아니면 예외 발생 // 변수니까 반드시 1개

👉 주입 대상이 배열일 때, 검색된 빈이 N개라도 예외 발생 X // 배열이니까 여러개 가능

👉 @Autowired(required=false)일 때, 주입할 빈을 못찾아도 예외 발생 X

 

* 생성자가 하나일때에는 @Autowired생략가능. 생성자가 여러개일때, 어느생성자가 주입될지 @Autowired를 붙이는게 좋음 

    public Car(){}
    //@Autowired
    public Car(@Value ("red") String color,@Value("100") int oil, Engine engine, Door[] doors) {
        this.color = color;
        this.oil = oil;
        this.engine = engine;
        this.doors = doors;
    }