생성자 주입을 사용해야하는 이유

|

###생성자 주입을 사용해야하는 이유


DI의 종류

  • Field Injection(by @Autowired) (필드 주입)
  • Setter Injection (수정자 주입)
  • Constructor Injection (생성자 주입)

  • 생성자 주입의 장점

      1. NPE 방지

        필드 주입과 수정자 주입의 경우

        의존하는 객체를 주입받지 못하여 NPE가 발생할 수 있지만

        생성자 주입은 객체 생성시 의존하는 객체르 주입 받아 이를 방지 할 수 있다.

      1. 순환참조 방지

    ​ 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();
        }
    }
    
      1. 테스트 코드 작성이 용이하다.

        필드 주입의 경우 스프링 컨테이너에 의존적이므로

        스프링과 관련된 애너테이션을 사용하지 않고는 주입할 방법이 없다.

        그에 비해 생성자 주입은 생성 시 필요한 객체들을 주입해주므로 POJO답게 객체를 사용할 수있다.