스프링의 의존성 주입은 말로만 들어봤지 정확히 어떤 의미인지 아직도 헷갈리는 개념이라 오늘 한번 정리해보기로 했다.
스프링(Spring)에서 의존성 주입(Dependency Injection, DI)은 객체 지향 프로그래밍에서 중요한 원칙 중 하나인 "의존성 역전 원칙(Dependency Inversion Principle, DIP)"을 구현하는 방법 중 하나입니다. 의존성 주입은 객체가 직접 필요로 하는 의존 객체를 생성하거나 참조하지 않고 외부에서 주입받는 방식을 의미합니다.
특징 1)의존 객체를 직접 생성하지 않음:
객체가 필요로 하는 다른 객체(의존성)를 직접 생성하거나 관리하지 않습니다. 대신 이러한 의존 객체를 외부에서 주입 받습니다.
특징 2)외부에서 주입:
객체를 생성하거나 관리하는 주체(스프링 컨테이너)가 객체 간의 의존성을 관리하고 필요한 의존 객체를 객체 생성 시 주입합니다.
스프링에서 의존성 주입은 주로 다음과 같은 방식으로 이루어진다:
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
이 방법은 주로 단순한 의존성 주입에 사용되며, 일부에서는 권장하지 않을 수 있음.
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// ...
}