• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

24.03.09 03:13 작성 24.03.09 03:14 수정 조회수 134

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님의 프로필

David

2024.03.10

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

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

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

감사합니다.

-1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.09

안녕하세요, 인프런 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의 의존성 주입을 사용하는 방법에 대한 유용한 정보를 얻을 수 있을 것입니다.

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