
@Autowired 어노테이션과 @RequiredArgsConstructor 어노테이션을 사용한 생성자 주입의 차이점에 대해 알아보자.
@Autowired 어노테이션:
@Autowired 어노테이션은 스프링 프레임워크에서 사용되며, 주로 필드, 메서드, 생성자 등에 적용된다.
@Autowired를 사용하면 해당 필드 또는 메서드에 대한 의존성을 스프링이 자동으로 주입한다.
주로 의존성 주입을 필드 레벨 또는 메서드 레벨에서 수행한다.
public class ExampleClass {
@Autowired
private SomeDependency someDependency;
// ...
}
@RequiredArgsConstructor와 private final:
Lombok 라이브러리의 @RequiredArgsConstructor 어노테이션은 클래스의 필드를 기반으로 생성자를 생성해주는 역할을 한다.
private final 필드를 가지는 클래스에서 이 어노테이션을 사용하면 해당 필드를 사용한 생성자가 자동으로 생성된다.
이 생성자는 초기화되지 않은 final 필드에 값을 할당하는 역할을 한다.
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class ExampleClass {
private final SomeDependency someDependency;
// ...
}
위 코드에서 @RequiredArgsConstructor를 사용하면 Lombok은 someDependency 필드를 사용한 생성자를 생성해준다.
이 생성자는 런타임에 someDependency에 대한 값을 전달받아 초기화한다.
주로 불변성을 강조하고자 할 때 final 필드와 함께 사용된다.
@Autowired는 스프링의 의존성 주입을 처리하는 데 사용되는 어노테이션으로, 주로 스프링 빈 간의 의존성을 자동으로 주입하는 데에 활용된다.@RequiredArgsConstructor와 private final은 Lombok을 사용하여 생성자를 자동으로 생성하는 데에 활용된다. 이를 통해 불필요한 코드를 줄이고 불변성을 유지하는 데 도움이 된다.