-
DI(Dependency Injection)의 종류와 장단점Programming/Spring 2022. 4. 26. 01:01
필드 주입
- 장점
- 의존성 주입하기가 쉬움
- 단점
- 외부에서 접근이 불가능하기 때문에 테스트시 객체를 수정할 수 없음
- final 키워드를 붙이기 못하기 때문에 객체의 불변을 보장하지 못함
- DI 프레임워크가 존재해야만 가능한 방식이기 때문에, 프레임워크에 의존적임
- SRP 위반
Setter 주입
- 장점
- 의존성이 선택적으로 필요한 경우에 사용 가능
- 의존성이 변경될 가능성이 있는 경우에 사용 가능
- 단점
- final 키워드를 붙이기 못하기 때문에 객체의 불변을 보장하지 못함
- 구현체를 주입해주지 않아도 생성이 가능해지는데, 이때 메서드를 호출하면 NullPointerException이 발생하게 됨. 즉, 주입이 필요한 객체가 주입되지 않아도 객체를 생성할 수 있게 된다는 것이 문제
생성자 주입
- 장점
- 의존 객체 주입 없이는 객체를 생성하지 못하도록 강제할 수 있음
- final 키워드 사용 가능
- 순환 의존성을 컴파일 단계에서 잡아낼 수 있다.
- 생성자의 매개변수로 의존성이 추가되기 때문에 의존성이 많아질 경우 개발자가 자연스레 리팩터링을 생각하게 함
- 특이사항
- 단일 생성자인 경우에 @Autowired 키워드 없어도 됨
'Programming > Spring' 카테고리의 다른 글
AOP 용어 정리 (0) 2022.09.19 @Transactional의 롤백 (1) 2022.05.18 @Configuration이 붙지 않은 클래스의 메서드에 @Bean을 붙이면 어떻게 될까? (1) 2022.05.18 - 장점