본문 바로가기
Spring

[Spring] DI, 의존관계 주입 방법

by happyhelen 2024. 4. 7.

 

의존 관계란?

 

'클래스 A가 클래스 B를 의존한다' 라고 했을 때,

 

B클래스의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다는 것이다.

 

그래서 직접적으로 클래스를 의존하는 것보다, 인터페이스로 추상화하면 더 다양한 클래스가 의존받을 수 있다.

 

추상화를 함으로써 더 다양한 의존 관계를 맺을 수가 있고, 실제 구현 클래스와 느슨한 결합 관계를 유지할 수 있다.

 

 


 

DI란?

 

 

생성자 주입. 의존 관계를 외부에서 결정하도록 하는 것이다.

 

즉, A클래스를 사용하고자 하는 또 다른 클래스에서 의존 관계를 결정하도록 하는 것이다.

 

DI를 위한 방법은 여러가지가 있다.

 

 

  • 생성자 주입
    • 생성자를 통해서 의존 관계를 주입하는 방법
    • 생성자 호출 시(빈 등록 시), 예를 들어 @Autowired 등의 의존 관계를 보고 스프링 컨테이너에서 스프링 빈을 꺼내서 주입
    • 생성자 호출 시점에 딱 1번만 호출되어 이후에 값을 세팅하지 못하게 막을 수 있어서 불변, 필수적인 의존관계에 사용
    • 값이 누락된 경우 컴파일 오류가 발생해서 IDE로 어디서 문제가 발생했는지 확인 가능
  • 수정자 주입(setter 주입)
    • setter 메소드를 통해 필드의 값을 변경하여 의존 관계를 주입하는 방법
    • 컨테이너에서 빈 등록 시가 아니라, 빈을 등록하고 난 이후에 의존관계 주입 시에 주입
    • public으로 열려 있어서 잘못 건드려서 에러 발생 가능성 존재
    • 선택, 변경 가능성이 있는 의존 관계에 사용
  • 필드 주입
    • 필드에 바로 주입하는 방법
    • 외부에서 변경이 불가능해서 테스트하기 힘들다는 단점
    • 지양하는 방법