Spring Boot/제어 역전(loC), 의존성 주입(DI)

[Spring boot] 의존성 주입(DI)

재윤 2025. 7. 21. 15:51
반응형

의존성 주입(DI)

의존성이란?

  • MyController는 MyServiceImpl에 의존 ****하고 있다. 즉, 동작하기 위해 다른 객체가 필요한 상황 == "의존성"
public class MyController {
    private MyService service = new MyServiceImpl();
}

 

 

의존성 주입이란?

  • 제어 역전의 방법 중 하나로 사용할 객체를 직접 생성 하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식 의미

스프링에서 의존성을 주입받는 방법 세 가지

  • 생성자를 통한 의존성 주입
  • 필드 객체 선언을 통한 의존성 주입
  • 세터(setter) 메서드를 통한 의존성 주입

스프링에서는 @Autowired라는 애너테이션(annotation)을 통해 의존성을 주입할 수 있다.

 

1. 생성자를 통한 의존성 주입

@RestController
public class DIController {

    MyService myService;

    @Autowired
    public DIController(MyService myService) {
        this.myService = myService;
    }

    @GetMapping("/di/hello")
    public String getHello() {
        return myService.getHello();
    }

}

 

2. 필드 객체 선언을 통한 의존성 주입

@RestController
public class FieldInjectionController {

    @Autowired
    private MyService myService;

}

 

 

3. 세터 메서드를 통한 의존성 주입

@RestController
public class SetterInjectionController {

    MyService myService;

    @Autowired
    public void setMyService(MyService myService) {
        this.myService = myService;
    }

}

 

스프링 공식 문서에서 권장하는 방식

  • 생성자를 통해 의존성을 주입받는 방식
  • 다른 방식과는 다르게 생성자를 통해 의존성을 주입받는 방식은 레퍼런스 객체 없이는 객체를 초기화할 수 없게 설계할 수 있기 때문
반응형