: final이 붙거나 @NotNull 이 붙은 필드의 생성자를 자동 생성해주는 롬복 어노테이션
@Service
public class PostServiceImpl implements PostService {
@Autowired
private PostRepository postRepository;
}
@Service
@RequiredArgsConstructor
public class PostServiceImpl implements PostService {
private final PostRepository postRepository;
}
@Service
public class PostServiceImpl implements PostService {
private final PostRepository postRepository;
@Autowired
public PostServiceImpl(PostRepository postRepository) {
this.postRepository = postRepository;
}
}
클래스 인스턴스를 생성할 때 필요한 의존성을 한 번에 주입함으로써 객체의 상태를 변경 불가능하게 만들어 객체의 예측 가능성을 높이고 오류를 방지
코드의 안전성을 높이고, 런타임에 발생할 수 있는 의존성 부재로 인한 오류를 미리 방지
// 생성자 주입을 사용한 경우
MyClass myObject = new MyClass(myDependency); // 의존성 주입 필수
// 필드 주입을 사용한 경우
MyClass myObject = new MyClass(); // 의존성 주입 없이 객체 생성 가능
생성자 주입은 의존성을 외부에서 주입받기 때문에, 테스트 중에 모의 객체(Mock Objects) 등을 쉽게 주입하여 테스트할 수 있음
순환 참조는 두 개 이상의 클래스가 서로를 의존하는 상황을 말하는데 생성자 주입을 사용하면 컴파일 시점에 순환 참조를 감지할 수 있음
생성자 주입은 의존성이 변경되는 경우 해당 클래스의 생성자만 수정하면 됨.
반면에 필드 주입은 필드를 직접 수정해야 하므로 변경에 따른 유지보수가 더 어려울 수 있음