[스프링] 스프링 DI (의존성 주입)
1. DI의 장점
의존성 주입은 애플리케이션의 구성요소들이 서로 느슨하게 결합되도록 하는데, 이를 통해 다음과 같은 장점을 얻을 수 있습니다.
- 유연성: 객체 간의 의존성이 외부에 의해 주입되므로, 구성 요소들간의 결합도가 낮아지며, 변경이 용이해집니다.
- 테스트 용이성: 의존성 주입을 통해 테스트 시에 모의 객체(mock object)나 가짜 객체(fack object)를 사용할 수 있어 테스트가 용이해집니다.
2. DI 방법
스프링 프레임워크에서는 다양한 방법으로 의존성 주입을 지원합니다.
- 생성자 주입(Constructor Injection): 객체를 생성할 때 생성자를 통해 의존성을 주입합니다.
- Setter 주입(Setter Injection): setter 메서드를 통해 의존성을 주입합니다.
- 필드 주입(Field Injection): 필드에 직접 의존성을 주입합니다.
- 자동 와이어링(Automatic Wiring): 스프링 컨테이너가 자동으로 의존성을 주입합니다.
3. 스프링에서의 DI 사용
스프링 프레임워크는 XML, 애노테이션, 자바 설정 클래스 등 다양한 방법으로 의존성 주입을 구성할 수 있습니다. 아래는 XML 설정과 애노테이션을 사용한 의존성 주입의 예시입니다.
XML 설정 예시
<bean id="customerService" class="com.example.CustomerServiceImpl">
<constructor-arg ref="customerRepository"/>
</bean>
<bean id="customerRepository" class="com.example.CustomerRepositoryImpl"/>
애노테이션을 사용한 설정 예시
@Component
public class CustomerService {
@Autowired
private CustomerRepository customerRepository;
// ...
}
의존성 주입을 위한 XML 설정에서는 constructor-arg
요소를 사용하여 의존성을 주입하고, 애노테이션을 사용한 설정에서는 @Autowired
애노테이션을 통해 의존성을 주입합니다.
의존성 주입은 스프링 프레임워크의 핵심적인 기능 중 하나이며, 애플리케이션의 유연성과 유지보수성을 높이는 데 중요한 역할을 합니다.