Programming/SpringFramework

[Spring] 의존성 주입 DI (Dependency Injection)

잇나우 2020. 7. 30. 16:29
반응형

DI

DI는 Dependency Injection의 약자로 직역하면 의존성 주입을 말한다. 객체간의 의존성을 생성자(Constructor) 또는 세터(Setter)를 통해 주입하는 것을 말한다. 의존관계는 간단히 말해 new 라는 키워드를 통해 생성이 된다. 의존성 주입은 IoC 원칙하에 객체간의 결합을 약하게 해주고 유지보수가 좋은 코드를 만들어 준다.

스프링에서의 의존성 주입은 외부 환경설정 (Spring config, xml, annotation 등을 통해서 이뤄진다. Bean 설정 정보를 바탕으로 Container가 자동적으로 연결해주는것을 말한다.

스프링의 의존성 주입의 3가지 유형

  1. 생성자를 이용한 의존성 주입 (Constructor Injection)
    Spring 4.X 이상부터 권장되는 방식

    public class Ex {
     private final Example example;
    
     @Autowired   // 스프링 4.3 버전부터는 @Autowired를 빼도 의존성 주입이 된다.
     public Ex(Example example) {
         this.example = example;
     }
    }

    의존성이 주입되지 않으면 애플리케이션이 실행되지 않는 장점이 있지만, 순환참조가 있을경우 실행 자체가 안된다. 그럴경우 setter나 필드 방법을 이용해야한다. final을 꼭 붙여주지 않아도 되지만 다른 레퍼런스가 바뀌지 않게끔 final을 붙여준다.

  2. setter 메소드를 이용한 의존성 주입 (Setter Injection)
    파라미터로 전달된 값을 내부의 인스턴스 변수에 저장하는 것. 스프링 3.X 에서 지지하는 DI 방식

    public class Ex {
     private Example example;
     @Autowired
     public void setExample(Example example){
         this.example = example;
     }
    }
  3. Field Injection
    가장 흔히 볼 수 있는 주입방법. 사용하기도 편하고 읽기도 편하다

    public class Ex{
     @Autowired
     private Example example;
    }

    많이 사용하지만 권장하지는 않는다. 너무 추상적인 주입기법이기 때문에 Dependency 관계가 복잡해질 수 있다.

의존성 주입은 Bean끼리만 가능하다. 즉 스프링 IoC Container 안에 들어있는 객체들 끼리만 Container가 의존성 주입을 해주는 것이다.

반응형

'Programming > SpringFramework' 카테고리의 다른 글

[Spring] 빈 (Bean)  (0) 2020.07.31
[Spring] IoC Container의 기본 개념  (0) 2020.07.30