인프런 커뮤니티 질문&답변

최재훈님의 프로필 이미지
최재훈

작성한 질문수

스프링 핵심 원리 - 기본편

롬복과 최신 트랜드

lombok 사용 시 [옵션 처리]와 [@Autowired 필드 명, @Qualifier, @Primary]는 어떻게 해야하나요?

작성

·

260

·

수정됨

0

[질문 내용]

생성자를 딱 1개 두고, @Autowired를 생략하고 Lombok 라이브러리의 @RequiredArgsConstructor 함께 사용하면 final 필드를 매개변수로 가진 생성자를 만들어준다는 것까지는 어느 정도 이해 했습니다!

1. 여기서 생성자가 1개이기 때문에 @RequiredArgsConstructor 애노테이션을 제외하면 코드에서 생성자에 관한 부분을 찾을 수 없는데 이전 강의[섹션 7: 옵션 처리]에서 학습한

@Autowired(requited=false)

@Nullable

Optional<>

를 사용하고 싶다면 어떻게 사용해야하는 것인지 의문이 들어 질문드립니다!

2.[@Autowired 필드 명, @Qualifier, @Primary] 강의에서의 @Autowired 필드 명 방법과 @Qualifier 방법(+ 애노테이션으로 만들어 사용하는 방법)도 lombok 라이브러리의 @RequiredArgsConstructor 사용시 어떻게 사용해야하는지도 궁금합니다.

두 질문의 경우에는 lombok을 사용하지 않고 직접 생성자 주입 코드를 만들어야 할까요?


답변 2

0

안녕하세요. 최재훈님, 공식 서포터즈 David입니다.

아래 글을 참고하시면 원하시는 것을 구현할 수 있을 것 같습니다:)

https://honeymon.io/tech/2020/07/18/lombok-copy-constructor-annotation.html

감사합니다.

-1

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용은 주로 Spring 프레임워크에서 사용하는 의존성 주입(Dependency Injection)과 관련된 내용에 대해 Lombok 라이브러리와의 호환성에 관한 고민으로 보입니다.

  1. @Autowired(required=false), @Nullable, Optional<>을 사용하여, 의존성 주입이 필수가 아닌 경우에는 Lombok의 @RequiredArgsConstructor를 사용할 때 해당 필드를 final로 선언하지 않습니다. 결국 @RequiredArgsConstructor는 final 또는 @NonNull이 선언된 멤버 변수로만 생성자를 생성하기 때문입니다. 이 경우, 선택적인 의존성 주입이 필요한 필드는 final로 선언하지 않고, 대신 수동으로 생성자를 작성하거나 별도의 Setter 메소드를 제공해야 합니다.

  2. @Autowired 필드 명을 기반으로 한 자동 주입 방법과 @Qualifier 또는 사용자 정의 애노테이션을 사용할 때도 Lombok의 @RequiredArgsConstructor와 충돌이 발생할 수 있습니다. 이런 경우엔 Lombok의 애노테이션 대신에 Spring에서 권장하는 명시적인 생성자 주입 방식을 사용하는 것이 좋습니다. 이 방식을 사용하면 @Qualifier나 사용자 정의 애노테이션을 생성자의 매개변수에 직접 적용할 수 있습니다.

강의에서 나온 유사한 상황에 대한 기존 질문과 답변 URL입니다:
- @Autowired 필드 명, @Qualifier에 관해서
- lombok과 autowired
- 실무에서 RequiredArgsConstructor를 사용할 때의 Annotation 사용 유무
- @Qualify, @Primary보다 @Autowired + @RequiredArgsConstructor이 최고의 방법 아닌가요?
- Lombok과 Qualifier

이 링크들을 참조하시면 Lombok과 함께 Spring의 의존성 주입을 사용하는 방법에 대한 유용한 정보를 얻을 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최재훈님의 프로필 이미지
최재훈

작성한 질문수

질문하기