Java에서 의존성 주입(Dependency Injection)과 관련된 어노테이션입니다.
private SomeDependency someDependency;
여기서 Spring은 SomeDependency 타입의 빈을 찾아 이 필드에 주입합니다.
@Autowired
private SomeDependency someDependency;
이 어노테이션은 Spring이 아닌 Lombok 라이브러리의 일부입니다. 필수 인수를 갖는 생성자를 생성합니다. 클래스에 이 어노테이션을 적용하면 Lombok이 클래스의 모든 final 필드를 초기화하는 생성자를 생성합니다.
@RequiredArgsConstructor
public class MyClass {
private final SomeDependency someDependency;
}
Spring 에서는 @Autowoired보다 생성자를 활용한 의존성 주입을 권장하고 있다.
이유는 다음과 같다.
순환 참조 방지:
Spring 애플리케이션에서는 종종 빈들 간에 순환 참조가 발생할 수 있습니다. 이러한 순환 참조는 애플리케이션의 동작을 예측할 수 없게 만들 수 있습니다. @RequiredArgsConstructor를 사용하면 필수적인 의존성을 가진 생성자가 자동으로 생성되므로, 순환 참조를 방지할 수 있습니다.
코드 변경에 대한 안전성:
클래스의 필드가 변경되는 경우, 수동으로 생성자를 업데이트해야 합니다. 그러나 이러한 업데이트를 잊어버리거나 실수로 누락할 수 있습니다. @RequiredArgsConstructor를 사용하면 Lombok이 필수적인 필드를 기반으로 생성자를 자동으로 관리하므로, 필드를 추가하거나 제거하는 등의 변경에 대해 안전성을 보장합니다.
불필요한 의존성 주입 방지:
@Autowired를 사용하면 모든 의존성이 주입됩니다. 그러나 이것은 때로는 필요하지 않은 의존성까지 주입할 수 있습니다. @RequiredArgsConstructor를 사용하면 오직 final로 선언된 필드에만 의존성이 주입되므로, 필요한 의존성만 주입되고 불필요한 주입을 방지할 수 있습니다.