1. 의존성 주입(DI)이란?
의존성 주입은 객체 간의 결합도를 낮추고 코드의 유연성과 재사용성을 높이기 위한 디자인 패턴 중 하나이다.
스프링은 DI를 통해 객체를 생성하고 의존성을 관리하는데, 주로 4가지 방식을 사용한다.
2. 스프링에서의 의존성 주입 방법
1) 생성자
public class MyClass {
private MyDependency dependency;
public MyClass(MyDependency dependency)
{
this.dependency = dependency;
}
}
생성자를 통해 의존성을 주입받는 방식
객체가 생성될 때 한 번만 주입되어 변경이 불가능하고 불변성을 유지할 수 있다.
2) 세터 주입(Setter Injection)
public class MyClass {
private MyDependency dependency;
public void setDependency(MyDependency dependency)
{
this.dependency = dependency;
}
}
세터 메서드를 통해 의존성을 주입받는 방식
객체 생성 후에도 동적으로 의존성을 변경할 수 있다.
3) 필드 주입(Field Injection)
public class MyClass {
@Autowired private MyDependency dependency;
}
필드에 직접 어노테이션을 통해 의존성을 주입받는 방식
주로 프레임워크에서 사용되며, 외부에서 변경이 어려워 테스트하기에는 어려움이 있다.
4) @Autowired 어노테이션
public class MyClass {
@Autowired
private MyDependency dependency;
}
@Autowired 어노테이션은 스프링에서 자동으로 해당 타입의 빈을 주입해주는 역할을 한다.
주로 필드나 세터 메서드에서 사용된다.
3. 의존성 주입의 장점
1) 결합도 감소 (Loose Coupling)
의존성 주입을 사용하면 객체 간의 결합도가 낮아져, 코드의 변경이나 유지보수가 쉬워진다.
2) 유연성 향상
의존성을 주입받는 방식에 따라 다양한 구현체를 주입하여 동작을 변경할 수 있어, 유연성이 향상된다.
3) 테스트 용이성
의존성을 주입받는 방식에 따라 테스트용 더미 객체나 목 객체를 주입하여 단위 테스트가 용이해진다.
4. 의존성 주입 주의사항
1) 순환 의존성 (Circular Dependency)
서로가 서로를 의존하는 경우를 말하며, 스프링은 이를 해결하기 위한 방법을 제공한다.
주로 @Autowired와 @Qualifier를 함께 사용하여 처리한다.
2) 의존성의 범위 (Scope of Dependency)
스프링 빈은 기본적으로 싱글톤(Singleton)으로 생성된다.
필요에 따라 프로토타입(Prototype) 등 다양한 범위로 설정할 수 있다.
'Spring' 카테고리의 다른 글
[Spring] Entity (0) | 2023.12.21 |
---|---|
[Spring] 스프링 객체 관리 / 빈(Bean) (1) | 2023.12.20 |
[Spring] Layered Architecture (1) | 2023.12.20 |
[Spring] MVC 웹 프레임워크 (1) | 2023.12.20 |
[Spring] Spring이란 ? (0) | 2023.12.14 |