의존 관계에는 필드 주입, 수정자 주입, 생성자 주입이 존재
>> 필드 주입과 수정자 주입은 의존성이 있는 객체가 생성되지 않아도 이를 포함하는 객체가 생성 가능해 이를 미리 인지하지 못하다가 런타임시 오류가 발생하여 위험하다는 것이 핵심이나 생성자 주입은 다름
생성자 주입은 생성자에서 의존관계 주입이 일어나기 때문에 생성자가 실행될 때 (= 객체가 생성될 때) 의존 객체의 null 여부 검사를 하기 때문에 컴파일시에 오류를 발생시켜 런타입 오류 발생을 미리 방지함
[사용자 주입 사용 이유]
1) 불변
: 의존 관계는 처음 애플리케이션 실행 후 종료전까지 변경되지 않고, 변경되서는 안됨
>>객체를 생성할 때 최초로 1번만 호출되고 그 이후에는 다시 호출되지 않기 때문에 불변하게 설계가 가능함
2) 누락
: 호출했을 때 의존관계 주입이 누락되어 NPE(NullPointException)이 발생할 수 있음
>> 생성자 주입을 사용할 경우 컴파일 오류가 발생하기에 런타입에러 방지가 가능함
3) final 키워드 사용
: 필드에 final 키워드 사용(생성 시점에 초기화가 이루어져야 함)을 할 수 있는데 생성자 값이 설정되지 않으면 컴파일 시점에 오류 확인 가능
: 생성자 주입을 제외한 나머지 주입 방식은 생성자 이후에 호출되는 형식이기 때문에 final 키어드 사용이 불가능함
4) 순환 참조
: 순환 참조 방지가 가능함
>> 여러 컴포넌트 간의 의존성(서로가 서로의 객체를 참조하며 실행됨)이 생기게 되며 서로가 서로의 객체를 참조하며 실행되는 메서드가 실행되면 무한루프가 되기 때문에 메모리가 터지는 에러가 발생
(필드 주입이나 수정자 주입에서는 런타임시 발견 가능)
'공부 자료 > Spring' 카테고리의 다른 글
[Spring Core] AOP - about Advice (0) | 2022.10.17 |
---|---|
[Spring Core] About AOP & AOP 용어 (0) | 2022.10.17 |
[Spring Core] 컴포넌트 스캔 & 필터 (0) | 2022.10.15 |
[Spring Core] Component Scan (0) | 2022.10.15 |
[Spring Core] Java 기반 컨테이너 설정 (0) | 2022.10.14 |