결론부터 말하면 생성자 주입이 더 좋다.
스프링 공식 문서에서도 생성자 주입 사용하는 것을 권고하고 있다.
생성자 주입
@RestController
@RequiredArgsConstructor
public class Example {
private final HelloService helloService;
}
필드 주입
@RestController
public class Example {
@Autowired
private HelloService helloService;
}
생성자 주입이 더 좋은 이유
1. 순환 참조 방지
순환 참조가 발생할 경우 애플리케이션 자체가 구동되지 않아서 사전에 오류를 방지할 수 있다.
필드 주입같은 경우는 순환 참조가 발생해도 구동한다. (메소드 실행 시점까지 되어야 서버 꺼짐.)
순환 참조: 객체 A가 객체 B를 참조하고, 다시 객체 B가 객체 A를 참조하면서 발생하는 문제
2. 객체의 불변성
생성자 주입은 final이 사용 가능하기 때문에 실행 중에 객체가 변하는 것을 막을 수 있다.
3. 테스트 코드 용이
필드 주입같은 경우는 Mockito를 사용하는 등 해야하지만, 생성자 주입같은 경우는 단순히 원하는 객체 생성한 후에, 생성자에 넣어주면 됨.
'Spring' 카테고리의 다른 글
[Spring] 트랜잭션 격리수준 (1) | 2024.04.28 |
---|---|
[Spring] Spring Security 동작 원리, 왜 사용하는 지 (0) | 2024.04.20 |
[Spring] DAO, DTO, VO 차이 (1) | 2023.10.26 |
[Spring] Spring MVC 동작 원리 (0) | 2023.10.25 |
[Spring] 스프링 JPA 정리 (0) | 2023.10.25 |