Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[Spring/스프링] @RequiredArgsConstructor (lombok) 본문

Study/Spring

[Spring/스프링] @RequiredArgsConstructor (lombok)

luke-king 2023. 12. 11. 19:40

lombok으로 스프링에 DI(의존성 주입)의 방법 중에 생성자 주입을 임의의 코드 없이 자동으로 설정해 주는 어노테이션이다.

@RequiredArgsConstructor는 초기화되지 않은 final 필드나 , @NonNull 이 붙은 필드에 대해 생성자를 생성해 준다.

새로운 필드를 추가할 때 다시 생성자를 만들어서 관리해야 하는 번거로움을 없애준다. (@Autowired를 사용하지 않고 의존성 주입)

  1. @RequiredArgsConstructor를 사용한 예시
@RestController
@RequiredArgsConstructor
@RequestMapping("/items")
public class Items{

  private final FirstService firstService;
  private final SecondService secondService;
  private final ThirdService thirdService;
  
  ...
}
  • 해당 필드로 구성된 생성자를 @RequiredArgsConstructor가 자동으로 생성자 주입에 대한 코드를 생성
  1. @RequiredArgsConstructor를 사용하지 않고 생성자 주입 코드를 모두 작성한 예시
@RestController
@RequestMapping("/items")
public class Items{

  private final FirstService firstService;
  private final SecondService secondService;
  private final ThirdService thirdService;
  
  @Autowired
  public Items(FirstService firstService, SecondService secondService, ThirdService thirdService) {
    this.firstRepository = firstRepository;
    this.secondRepository = secondRepository;
    this.thirdRepository = thirdRepository;
  }
}

보통 DI(의존성 주입)을 방식에는 필드 주입(Field Injection), 수정자 주입(Setter Injection), 생성자 주입(Constructor Injection)의 3가지 방법이 있는데 이 중에서 권장하는 의존성 주입은 생성자 주입 방식이다.

하지만 생성자 주입을 위한 코드를 만드는 부분에서 번거로움이 존재한다.

그래서 많이들 사용하는 lomBok에서 @Getter,@Setter 어노테이션처럼 @RequiredArgsConstructor 어노테이션은 클래스에 선언된 final 변수들, 필드 들을 매개 변수로 하는 생성자를 자동으로 생성해 주는 어노테이션이다.

 

※ 참고: https://dreamcoding.tistory.com/83