Spring 프레임워크에서 의존성 주입(Dependency Injection, DI)은 객체 간의 의존성을 외부에서 주입하여 객체들 간의 결합도를 낮추고, 코드의 유연성과 테스트 용이성을 높이는 중요한 기법입니다. Spring에서는 크게 세 가지 방식으로 의존성 주입을 할 수 있습니다: Setter 주입, 필드 주입, 생성자 주입입니다. 각 방법의 장단점을 알아보겠습니다.
Setter 주입은 객체의 Setter 메서드를 통해 의존성을 주입하는 방법입니다. 이 방식은 선택적인 의존성 주입에 유리하며, 생성 후에 의존성을 변경할 수 있습니다.
@Component
public class MyService {
private MyRepository myRepository;
@Autowired
public void setMyRepository(MyRepository myRepository) {
this.myRepository = myRepository;
}
}
장점:
단점:
필드 주입은 클래스의 필드에 직접 @Autowired 어노테이션을 붙여 의존성을 주입하는 방법입니다. 코드가 간결해지지만, 테스트 및 유지보수에 불리할 수 있습니다.
@Component
public class MyService {
@Autowired
private MyRepository myRepository;
}
장점:
단점:
생성자 주입은 객체 생성 시점에 필요한 의존성을 주입받는 방식입니다. Spring 4.3 이후부터는 생성자가 하나뿐인 경우 @Autowired 어노테이션을 생략해도 자동으로 의존성이 주입됩니다.
@Component
public class MyService {
private final MyRepository myRepository;
@Autowired
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
}
장점:
단점:
Spring에서는 상황에 따라 세 가지 의존성 주입 방법을 적절히 사용할 수 있습니다.
Setter 주입: 선택적 의존성이 필요할 때 유용합니다.
필드 주입: 코드가 간결해지는 장점이 있지만, 테스트와 유지보수 측면에서 주의가 필요합니다.
생성자 주입: 필수 의존성을 명확하게 설정할 수 있으며, 객체의 일관성과 불변성을 유지할 수 있어 권장되는 방법입니다.