생성자 주입을 사용해야하는 이유
09 Dec 2019 | Spring###생성자 주입을 사용해야하는 이유
DI의 종류
- Field Injection(by @Autowired) (필드 주입)
- Setter Injection (수정자 주입)
-
Constructor Injection (생성자 주입)
-
생성자 주입의 장점
-
-
NPE 방지
필드 주입과 수정자 주입의 경우
의존하는 객체를 주입받지 못하여 NPE가 발생할 수 있지만
생성자 주입은 객체 생성시 의존하는 객체르 주입 받아 이를 방지 할 수 있다.
-
-
- 순환참조 방지
A,B 객체가 서로에게 의존하는 상황이라고 가정하자.
생성자 주입으로 A객체에서 B객체를, B객체에서 A객체를 주입 받는다면
애플리케이션이 시작하기 전에 순환참조임을 알려주므로
스택오버플로우를 사전에 방지할 수 있다.
@Service public class A { private B b; @Autowired public A(B b) { this.b = b; } public void thisIsAMethod() { b.thisIsBMethod(); } } @Service public class B { private A a; @Autowired public B(A a) { this.a = a; } @Override public void thisIsBMethod() { a.thisIsAMethod(); } }
-
-
테스트 코드 작성이 용이하다.
필드 주입의 경우 스프링 컨테이너에 의존적이므로
스프링과 관련된 애너테이션을 사용하지 않고는 주입할 방법이 없다.
그에 비해 생성자 주입은 생성 시 필요한 객체들을 주입해주므로 POJO답게 객체를 사용할 수있다.
-
-