@Autowired 를 가급적 쓰지 말라는 이유
2022. 3. 1. 23:38ㆍSpring
@Autowired 는 생성자 주입 방식 시에도, 필드 주입 방식 시에도 사용할 수 있음. 따라서 @Autowired 를 가급적 쓰지 말라는 이유는 두 가지로 분류할 수 있음.
- (생성자 주입, 필드 주입 둘 다 포함)@Autowired 자체의 어떠한 단점으로 인해 사용을 지양하는 것이 좋으며, 그 단점이 무엇인지?
- @Autowired 를 적용한 필드 주입 방식보다는 생성자 주입 방식을 왜 선택해야 하는지
1. @Autowired 자체의 어떠한 단점으로 인해 사용을 지양하는 것이 좋으며, 그 단점이 무엇인지?
순환 참조가 발생할 수 있음. 순환 참조가 발생할 경우, 컴파일 타임 시 에러가 잡히지 않다가 로직이 실행되는 런타임 시에 에러가 잡힘. 컴파일 때 에러가 잡히지 않으니, 애플리케이션이 정상적으로 작동하는 것 보임. setter 주입이나 생성자 주입의 경우에는 컴파일 타임 때 에러가 잡히므로, 문제가 되는 부분을 즉각적으로 파악할 수 있음.
2. @Autowired 를 적용한 필드 주입 방식보다는 생성자 주입 방식을 왜 선택해야 하는지
세 가지 이유가 있음.
- 불변
- 생성자 주입은 객체를 생성할 시 딱 한번만 호출되므로, 이후 의존관계를 변경할 일이 없으며 변경의 여지를 만들지 않음.
- 누락
- 순수 자바 테스트에서 의존 관계를 누락한 경우, 생성자 주입은 컴파일 오류가 발생. setter 주입의 경우 런타임 시 에러. 필드 주입의 경우에는 아예 불가능(외부 라이브러리에 테스트를 의존해야 함)
- final 키워드 사용 유무
- 생성자 주입의 경우 final 키워드 사용 가능. 그래서, 혹시라도 값이 설정되지 않는 경우 즉각적으로 컴파일 오류를 뱉어냄.
'Spring' 카테고리의 다른 글
Stereotype Annotation 및 bean 등록 과정 (0) | 2022.03.01 |
---|