@Autowired란?@Autowired는 Spring Framework에서 의존성 주입(Dependency Injection, DI)을 위한 어노테이션입니다. Spring 컨테이너가 애플리케이션의 객체들 간에 필요한 의존 관계를 자동으로 해결해주기 위해 사용됩니다. 쉽게 말해, @Autowired는 자동으로 객체를 주입해주는 역할을 합니다.
의존성 주입(DI)은 객체가 다른 객체에 의존할 때, 해당 의존 객체를 외부에서 주입하는 방식입니다. 이를 통해 클래스 간의 결합도를 낮추고, 유연한 코드와 단위 테스트 용이성을 제공합니다.
예를 들어, UserService 클래스가 UserRepository 객체에 의존하고 있다고 가정할 때, Spring이 UserRepository를 자동으로 UserService에 주입해주도록 하는 것입니다.
@Autowired의 사용 방법@Service
public class UserService {
@Autowired
private UserRepository userRepository;
}
@Autowired를 사용하면, Spring은 UserRepository 타입의 객체를 찾아 자동으로 주입합니다. final로 선언되지 않기 때문에 불변성(immutable)을 보장할 수 없습니다. @Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
@Autowired를 사용하면, Spring은 생성자를 호출할 때 의존성을 주입합니다. final을 사용하여 의존성을 불변으로 만들 수 있으며, 단위 테스트가 용이합니다. @Autowired 어노테이션을 생략할 수 있습니다.@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
@Autowired를 사용하면, 의존성이 선택적으로 주입될 수 있습니다. @Autowired의 동작 방식@Autowired가 붙은 필드, 생성자, 세터 메서드에 대해 의존 객체를 주입합니다.No qualifying bean of type...)@Autowired의 특징| 특징 | 설명 |
|---|---|
| 자동 주입 | Spring은 @Autowired가 붙은 변수, 생성자, 세터 메서드에 자동으로 의존성을 주입함 |
| 선택적 주입 | 의존성이 여러 개일 경우, @Qualifier를 사용하여 명시적으로 주입할 빈을 선택할 수 있음 |
| 빈이 없을 경우 | 주입할 객체가 없으면 예외가 발생 (No qualifying bean of type...) |
@Autowired 생략 가능 | Spring 4.3 이상에서는 생성자가 하나일 경우 @Autowired 어노테이션을 생략 가능 |
@Autowired는 Spring의 의존성 주입을 자동화하여, 객체 간의 의존성을 쉽게 관리하고, 코드의 결합도를 낮추며, 유연하고 테스트하기 좋은 구조를 만듭니다.
@Autowired를 통해 Spring 컨테이너가 자동으로 의존성 객체를 주입해주는 방식을 활용하면, 더 나은 애플리케이션 설계가 가능합니다. 🚀