의존성 주입(Dependency Injection)은 객체 간의 의존 관계를 컨테이너가 자동으로 관리하도록 하는 디자인 패턴입니다.
객체가 사용하는 다른 객체를 직접 생성하거나 관리하는 것이 아니라, 컨테이너에서 필요한 객체를 생성하고 관리하며, 필요한 경우 객체 간의 의존 관계를 자동으로 설정합니다.
이를 통해 객체 간의 결합도를 낮추고, 유연하고 확장 가능한 구조를 유지할 수 있습니다.
public class UserService {
private UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
public class UserService {
private UserRepository userRepository;
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
public class UserService {
@Autowired
private UserRepository userRepository;
}
스프링 프레임워크에서는 대부분의 의존성 주입을 Setter 주입이나 필드 주입으로 구현합니다. 스프링은 자동으로 객체 간의 의존 관계를 파악하고, 필요한 객체를 주입해줍니다.
의존성 주입을 사용하면, 객체 간의 결합도를 낮추고 유지보수성을 향상
시킬 수 있습니다. 객체가 사용하는 다른 객체를 직접 생성하거나 관리하지 않기 때문에, 객체의 변경이나 교체가 발생해도 다른 객체에 영향을 주지 않습니다. 또한, 객체를 테스트하기 위해서는 의존 객체를 가짜 객체(Mock Object)로 대체하여 테스트
할 수 있습니다. 이를 통해 객체의 독립성을 높이고, 테스트 용이성을 높일 수 있습니다
.