Lombok으로 스프링에서 DI(의존성 주입)의 방법 중에 생성자 주입을 임의의 코드없이 자동으로 설정해주는 어노테이션이다.
@RequiredArgsConstructor는 초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성해준다.
새로운 필드를 추가할 때 다시 생성자를 만들어서 관리해야하는 번거로움을 없애준다. (@Autowired를 사용하지 않고 의존성 주입)
@RestController
@RequiredArgsConstructor
public class DiaryController {
private final DiaryService diaryService;
private final UserService userService;
}
해당 필드로 구성된 생성자를 @RequiredArgsConstructor가 자동으로 생성자 주입에 대한 코드를 생성한다.
DI(의존성 주입) 방식에는 필드 주입(Field Injection), 수정자 주입(Setter Injection), 생성자 주입(Constructor Injection)의 3가지의 방법이 있는데 이중에서 가장 권장하는 의존성 주입은 생성자 주입 방식이다.
하지만 생성자 주입을 위한 코드를 만드는 부분에서 번거로움이 존재한다.
그래서 Lombok의 @Getter, @Setter 어노테이션 처럼 @RequiredArgsConstructor 어노테이션은 클래스에 선언된 final 변수들, 필드들을 매개변수로 하는 생성자를 자동으로 생성해주는 어노테이션이다.