일단 시작하기전에
스프링 공식 문서에서는 생성자를 통한 의존성(@RequiredArgsConstructor) 주입 (DI)를 권장하고 있다.
Spring Team recommends: “Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies”.
(번역하자면 대충 쓰지말란 소리다)
@Autowired도 예전에 나는 많이 썼었다. 일단 편하기때문이지!
하지만 final 옵션을 사용할 수 없기에, 의존성 주입하고 코드가 변질되어도 알 수가 없다.
또한 중복으로 참조가 가능하다.-> 런타임시 에러발생
아래에 예제 참조가 잘나와있다.
https://madplay.github.io/post/why-constructor-injection-is-better-than-field-injection
그래서 우린 생성자주입을 써야 한단것이에오.
@RequiredArgsConstructor의 특징은 다음과 같다.
- 이 어노테이션은 Lombok에서 지원하는 어노테이션이다.
- 필드 주입처럼 보이지만 @RequiredArgsConstructor를 사용하면 생성자로 의존성 주입을 한다.
- final 키워드가 붙은 필드에 대해 생성자를 만들어준다.
- 스프링 개발팀에서 생성자 주입을 사용할 것을 권장하는 이유는 한번 의존성 주입을 받은 객체는 프로그램이 끝날 때까지 변하지 않는 특징을 가지므로 불변성을 표시해주는 것이 좋기 때문이다. -> 객체의 불변성(Immutability) 보장
결론,
@Bean 이 하나만 있다면 상관없지만, 같은 타입의 다른이름의 @Bean 이 있을 경우 @Autowired 를 쓰게된다면, 런타임시 에러가 발생하지만, @RequiredArgsConstructor 이용은 컴파일시에 이걸 알려주므로 (final) 그만큼 위험부담이 더 적고 안전하게 개발할 수 있겠다,
끝
참조
'web > SpringBoot' 카테고리의 다른 글
[REST API] @Primary / @Qualifier (0) | 2023.11.20 |
---|---|
[REST API] API 연동 하여 클라이언트와 통신하기 (0) | 2023.11.16 |
[REST API] CustomException 처리(@StandardException) (0) | 2023.11.16 |
[REST API] @Configuration / @Component (1) | 2023.11.14 |
[Mybatis] Mybatis 에서 useGeneratedKeys 와 selectkey (1) | 2023.11.13 |