@Autowired vs @RequiredArgsConstructor

code_able·2024년 5월 13일
0
post-custom-banner

@Autowired와 @RequiredArgsConstructor

Java에서 의존성 주입(Dependency Injection)과 관련된 어노테이션입니다.

@Autowired

private SomeDependency someDependency;
여기서 Spring은 SomeDependency 타입의 빈을 찾아 이 필드에 주입합니다.

@Autowired
private SomeDependency someDependency;

@RequiredArgsConstructor

이 어노테이션은 Spring이 아닌 Lombok 라이브러리의 일부입니다. 필수 인수를 갖는 생성자를 생성합니다. 클래스에 이 어노테이션을 적용하면 Lombok이 클래스의 모든 final 필드를 초기화하는 생성자를 생성합니다.

@RequiredArgsConstructor
public class MyClass {
    private final SomeDependency someDependency;
}

무엇을 사용할까

Spring 에서는 @Autowoired보다 생성자를 활용한 의존성 주입을 권장하고 있다.
이유는 다음과 같다.

  1. 순환 참조 방지:
    Spring 애플리케이션에서는 종종 빈들 간에 순환 참조가 발생할 수 있습니다. 이러한 순환 참조는 애플리케이션의 동작을 예측할 수 없게 만들 수 있습니다. @RequiredArgsConstructor를 사용하면 필수적인 의존성을 가진 생성자가 자동으로 생성되므로, 순환 참조를 방지할 수 있습니다.

  2. 코드 변경에 대한 안전성:
    클래스의 필드가 변경되는 경우, 수동으로 생성자를 업데이트해야 합니다. 그러나 이러한 업데이트를 잊어버리거나 실수로 누락할 수 있습니다. @RequiredArgsConstructor를 사용하면 Lombok이 필수적인 필드를 기반으로 생성자를 자동으로 관리하므로, 필드를 추가하거나 제거하는 등의 변경에 대해 안전성을 보장합니다.

  3. 불필요한 의존성 주입 방지:
    @Autowired를 사용하면 모든 의존성이 주입됩니다. 그러나 이것은 때로는 필요하지 않은 의존성까지 주입할 수 있습니다. @RequiredArgsConstructor를 사용하면 오직 final로 선언된 필드에만 의존성이 주입되므로, 필요한 의존성만 주입되고 불필요한 주입을 방지할 수 있습니다.

profile
할수 있다! code able
post-custom-banner

0개의 댓글