[Spring] DI(의존성주입)의 세가지 방법

정은영·2022년 12월 13일
0

CS

목록 보기
16/18

Spring은 @Autowired 어노테이션을 이용한 다양한 의존성 주입 방법을 제공합니다.
@Autowired 어노테이션은 Spring에게 의존성을 주입하라는 지시자 역할로 쓰이는데 생성자, 필드, Setter에 붙일 수 있습니다.

Spring IoC 컨테이너에 의한 의존성 주입은 빈(Bean)끼리만 가능합니다.

1. 생성자 주입

생성자에 @Autowired 어노테이션을 붙여 의존성을 주입받을 수 있습니다.

  • spring 4.3부터는 클래스의 생성자가 하나이고 그 생성자로 주입받을 객체가 빈으로 등록되어 있다면 생성자 주입에서 @Autowired를 생략할 수 있습니다.
@Component
public class SampleController {
    private SampleRepository sampleRepository;
 
    @Autowired
    public SampleController(SampleRepository sampleRepository) {
        this.sampleRepository = sampleRepository;
    }
}

2. 필드 주입

변수 선언부에 @Autowired 어노테이션을 붙인다.

@Component
public class SampleController {
    @Autowired
    private SampleRepository sampleRepository;
}

3. Setter 주입

Setter 메소드에 @Autowired 어노테이션을 붙인다.

@Component
public class SampleController {
    private SampleRepository sampleRepository;
 
    @Autowired
    public void setSampleRepository(SampleRepository sampleRepository) {
        this.sampleRepository = sampleRepository;
    }
}

이 세개의 코드는 모두 동일하게 SampleController에 SampleRepository를 주입하도록 합니다.

생성자, 필드, Setter 주입 중 어떤 방법을 좋을까?

Spring framework reference에서 권장하는 방법은 생성자를 통한 주입입니다.
생성자를 사용하는 방법이 가장 좋은 이유는 필수적으로 사용해야 하는 의존성 없이는 인스턴스를 만들지 못하도록 강제할 수 있기 때문입니다.

SampleControllerSampleRepository 없이는 제대로 동작할 수 없다면 SampleController 입장에서 SampleRepository는 반드시 있어야 하는 객체인데 이것을 강제할 수 있는 가장 좋은 방법은 생성자 주입 방법을 쓰는 것입니다.

Reference

0개의 댓글