@Autowired보다 생성자 주입 방식을 더 많이 쓰는 이유 ?
1. 불변성(immutability) 확보 : 실수 방지 ( @Autowired는 나중에 값이 바뀌는 걸 방지할 수 없다.)
2. 테스트가 쉬워짐 : Mock 주입하려면 Spring context 필요 → 느림
3. 순환 참조 방지에 도움 : 생성자 주입은 순환 참조가 있으면 애초에 애플리케이션이 실행되지 않음 → 문제를 초기에 바로 발견할 수 있음
Spring 공식 문서에도 생성자 주입 방식 기본으로 쓰라고 권장하고 있다고 한다.
그래서 자주쓰이는 짝꿍이 @RequiredArgsConstructor다.
@RequiredArgsConstructor
이걸 클래스에 붙이면,
final로 선언된 필드들만 파라미터로 받는 생성자를 자동으로 만들어주는 Lombok에서 제공하는 어노테이션이다.
예제
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
private final EmailService emailService;
private String someTempValue; // <- 이건 생성자에 포함되지 않음
}
이렇게하면 아래 생성자가 자동 생성된다.
public MemberService(MemberRepository memberRepository, EmailService emailService) {
this.memberRepository = memberRepository;
this.emailService = emailService;
}
즉 DI(의존성 주입)시 자주 쓰이는 패턴!
상황 | 쓰면 좋은 이유 |
불변 객체 설계 | final 필드만 받는 생성자니까 객체의 일관성 유지에 유리 |
스프링 DI | 생성자 주입 방식으로 final 필드 주입 간편 |
'🍃Spring' 카테고리의 다른 글
# 접근제어 인터셉터(interceptor) vs 필터(filter) 뭐가 나을까? 차이점 (1) | 2025.06.17 |
---|---|
# Spring boot(maven) - Swagger로 내가 만든 API 관리를 편하게 해보자. (1) | 2025.05.28 |
# 자바 객체 읽기전용, 쓰기전용 만들기 (1) | 2025.05.28 |
# @ConfigurationPropertiesScan, @ConfigurationProperties (0) | 2025.03.06 |
# Spring - MyBatis 구조 (0) | 2025.02.17 |