티스토리 뷰
필드 주입에는 3가지 방법이 있다.
필드 주입 | 세터 주입 | 생성자 주입 | |
개요 | 클래스의 필드(변수)에 직접 의존성을 주입하는 방법 | 세터 메서드를 통해 의존성을 주입하는 방법 | 생성자를 통해 의존성을 주입하는 방법 |
기술 방법 | 필드에 @Autowired 애너테이션을 부여 | 세터 메서드에 @Autowired 애너테이션을 부여 | 생성자에 @Autowired 애너테이션을 부여 |
특징 | 코드가 단순해지지만 테스트 시 모킹 하기 어려울 수 있다 | 필요한 의존성만 주입할 수 있다 | 불변성이 유지되어 테스트할 때 모킹이 용이해 진다 |
필드주입 예시
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class FieldInjectionExample {
@Autowired
private Dependency dependency;
public void doSomething() {
dependency.doWork();
}
}
필드 주입
특징 : @Autowired 어노테이션을 사용하여 클래스의 필드에 직접 의존성을 주입합니다.
장점 : 코드가 간결하고 쉽게 작성할 수 있습니다.
단점 :
테스트가 어려움 : 필드 주입은 테스트 시 객체를 쉽게 초기화 할 수 없으므로 유닛 테스트가 어려울 수 있습니다.
불변성 문제 : 필드가 final 로 선언될 수 없어 객체의 불변성을 보장하기 어렵습니다.
순환 의존성 감지 어려움 : 순환 의존성이 발생했을 때 이를 감지하기 어렵습니다.
세터 주입 예시
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SetterInjectionExample {
private Dependency dependency;
@Autowired
public void setDependency(Dependency dependency) {
this.dependency = dependency;
}
public void doSomething() {
dependency.doWork();
}
}
세터 주입
특징 : @Autowired 어노테이션을 사용하여 세터 메서드를 통해 의존성을 주입합니다.
장점 :
선택적 의존성 : 의존성이 선택적을 때 유용하며, 객체 생성후에요 의존성을 설정할 수 있습니다.
유연성 : 의존성을 변경할 수 있는 유연성을 제공합니다.
단점 :
코드 양 증가 : 세터 메서드를 추가해야 하므로 코드가 길어질 수 있습니다.
Null 체크 필요 : 의존성이 설정되지 않을 수 있으므로 null 체크가 필요합니다.
생성자 주입 예시
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ConstructorInjectionExample {
private final Dependency dependency;
@Autowired
public ConstructorInjectionExample(Dependency dependency) {
this.dependency = dependency;
}
public void doSomething() {
dependency.doWork();
}
}
생성자 주입
특징 : 클래스의 생성자를 통해 의존성을 주입합니다. @Autowired 를 생략할 수 있습니다.
장점 :
테스트 용이성 : 테스트 시 쉽게 객체를 초기화할 수 있어 유닛 테스트에 유리합니다.
불변성 보장 : 필드를 final 로 선언할 수 있어 객체의 불변성을 보장합니다.
순환 의존성 감시 : 순환 의존성이 발생하면 예외가 발생하여 이를 쉽게 감지할 수 있습니다.
단점 :
코드 양 증가 : 생성자를 추가해야 하므로 코드가 길어질 수 있습니다.
복잡한 의존성 : 많은 의존성을 주입할 경우 생성자 파라미터가 많아질 수 있습니다.
'스프링프레임워크' 카테고리의 다른 글
MVC 모델 알아보기 (0) | 2025.03.15 |
---|---|
AOP 용어와 어노테이션 정리 (0) | 2025.03.15 |
bean 과 DI 컨테이너 (1) | 2025.03.10 |
템플릿 엔진 (0) | 2025.03.01 |
MVC 모델이란 (1) | 2025.02.28 |