생성자 주입/필드 주입/setter 주입

2025. 4. 25. 18:40·DEVELOP/SPRING

Spring에서 의존성 주입(DI, Dependency Injection)을 하는 방식은 생성자 주입, 필드 주입, setter 주입 이렇게 3가지가 있다.

 

생성자 주입 (Constructor Injection)


    @Component
    public class MemberService {

      private final MemberRepository memberRepository;

      @Autowired
      public MemberService(MemberRepository memberRepository) {
          this.memberRepository = memberRepository;
      }
  }

특징

  • 불변성 보장: final 사용 가능 -> 생성 이후 값 변경 불가
  • 테스트에 용이: 필요한 의존성을 명확하게 알 수 있음
  • 의존성 누락 방지: 주입하지 않으면 컴파일/런타임 에러 발생

단점

  • 생성자 인자가 너무 많아지면 가독성 저하

 

필드 주입 (Field Injection)


@Component
public class MemberService {

    @Autowired
    private MemberRepository memberRepository;
}

특징

  • 가장 간단한 방식, 코드량이 적음

단점

  • 키워드 사용 불가 -> 값의 불변성을 보장하지 않는다.
  • 테스트 어려움: Mock 주입하려면 리플렉션을 사용해야 한다.
  • DI 프레임워크에 강하게 결합된다. -> 외부에서 주입 불가능
  • 생성 시점 확인이 어렵다.

 

Setter 주입 (Setter Injection)


@Component
public class MemberService {

    private MemberRepository memberRepository;

    @Autowired
    public void setMemberRepository(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
}

특징

  • 선택적 의존성 주입에 적합 (null 가능성이 있음)
  • 유연성: 초기화 이후 변경 가능

단점

  • 객체가 완전히 초기화되지 않은 상태로 사용될 위험
  • 변경 가능성이 생김 -> 안정성이 낮다.

 

보통은 생성자 주입을 권장한다. 안전하고 명확하여 테스트에 유리하기 때문이다.

 

'DEVELOP > SPRING' 카테고리의 다른 글

Reflection  (1) 2025.05.06
[SPRING/JPA] Fetch 전략  (1) 2025.05.02
IoC와 DI  (0) 2025.04.25
'DEVELOP/SPRING' 카테고리의 다른 글
  • Reflection
  • [SPRING/JPA] Fetch 전략
  • IoC와 DI
콘순이
콘순이
개발 보안 관련 스터디 기록장
  • 콘순이
    SECURITY DEVELOPER
    콘순이
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (69)
      • BAEKJOON (45)
      • ALGORITHM (4)
      • QUALIFICATIONS (0)
      • PYTHON (1)
      • PROGRAMMERS (6)
      • DEVELOP (10)
        • SPRING (4)
        • ERROR (0)
        • CONCEPT (5)
        • AWS (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    문자열
    알고리즘
    Python
    비트 마스킹
    비트 조작
    solid
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
콘순이
생성자 주입/필드 주입/setter 주입
상단으로

티스토리툴바