개념정복💫/스프링 Spring 정복
스프링에서 Bean 주입 시 주의사항 (필드 vs 생성자 주입)
옹쑥이
2025. 2. 24. 00:28
Spring에서 의존성 주입(Dependency Injection)을 할 때, 흔히 @Autowired를 사용합니다.
여기서 필드 주입(Field Injection)과 생성자 주입(Constructor Injection) 두 가지 중 무엇을 사용할지 자주 논의되는데요,
주로 권장되는 방식은 생성자 주입입니다.
1. 필드 주입(@Autowired)의 문제점
- 가시성 부족: 클래스 내부 필드에 그냥 @Autowired 하면, 어디서 어떻게 주입되는지 한눈에 파악하기 어려움
- final 사용 불가: 런타임에 주입되므로, 재할당 불가능하게 만들기 힘듦
- 테스트 어려움: 단위 테스트에서 Mock 객체를 주입하기가 번거롭거나 불가능할 수 있음
2. 생성자 주입의 장점
- 명시적 의존성: 생성자 시그니처에서 어떤 의존성이 필요한지 바로 확인
- 테스트 용이성: 생성자를 통해 Mock 객체를 쉽게 주입 가능
- 불변성: final 키워드로 의존성을 재할당하지 못하도록 막을 수 있음
@Service
public class DiaryService {
private final DiaryRepository diaryRepository;
public DiaryService(DiaryRepository diaryRepository) {
this.diaryRepository = diaryRepository;
}
// ...
}
- 위와 같은 방식이 더 안전하고 유지보수에 용이합니다.