의존성을 명시적으로 표현
생성자 주입은 클래스가 필요로 하는 의존성을 명확하게 표현합니다. 즉, 클래스가 어떤 의존성을 필요로 하는지를 코드 수준에서 알 수 있습니다.
불변성
생성자를 통한 의존성 주입은 해당 필드를 변경할 수 없게 만들어 불변성을 유지할 수 있습니다.
이는 객체 지향 프로그래밍의 원칙 중 하나인 불변성을 유지하는데 도움을 줍니다.
의존성 주입의 강제화
생성자를 통한 주입은 필수적으로 의존성이 주입되어야 함을 강제합니다.
이는 런타임 시에 NullPointerException 등의 에러를 방지할 수 있습니다.
테스트 용이성
생성자 주입을 사용하면 단위 테스트를 수행하기가 더 쉬워집니다.
생성자를 통해 의존성을 주입하면 테스트 시에 모의 객체(Mock)를 사용하여 의존성을 대체하기 쉬워집니다.
스프링 DI 컨테이너와의 호환성
스프링 프레임워크는 생성자 주입을 기본적으로 지원하므로, 스프링의 DI 컨테이너와 잘 호환됩니다.
이는 코드를 더 간결하고 유지보수하기 쉽게 만들어 줍니다.
순환 참조 방지
생성자 주입을 사용하면 스프링 컨테이너가 빈을 초기화할 때 발생할 수 있는 순환 참조 문제를 방지할 수 있습니다.
@Service
public class UserService {
private UserRepository userRepository;
private MemberService memberService;
public UserService(UserRepository userRepository, MemberService memberService) {
this.userRepository = userRepository;
this.memberService = memberService;
}
}
생성자 주입은 스프링에서 의존성 주입을 하는데 권장되는 방법 중 하나입니다.