개발자가 직접 객체를 생성하고, 의존 관계를 설정해야 함
public class UserService {
private UserRepository userRepository = new UserRepository(); // 직접 객체 생성
}
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) { // DI를 통해 자동 주입
this.userRepository = userRepository;
}
}
UserRepository객체의 생성과 주입을 Spring이 관리
생성자 주입 (Constructor Injection)
final 필드를 활용 가능 (권장 방식) @Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
필드 주입 (Field Injection)
@Autowired를 필드에 직접 적용 @Service
public class UserService {
@Autowired
private UserRepository userRepository;
}
Setter 주입 (Setter Injection)
@Autowired를 Setter 메서드에 적용 @Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
| 개념 | 설명 |
|---|---|
| IoC (제어의 역전) | 객체의 생성과 관리를 개발자가 아닌 Spring Container가 담당 |
| DI (의존성 주입) | 객체를 직접 생성하는 대신, Spring이 자동으로 주입해주는 방식 |
| DI 방식 | 생성자 주입(권장), 필드 주입, Setter 주입 |
✅ 결론