티스토리 뷰

필드 주입에는 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함