정의

@AutowiredSpring에서 의존성 주입(DI)을 자동으로 수행하도록 지원하는 애너테이션이다.

@Autowired타입을 기준으로 Bean을 자동 연결하며, 같은 타입의 Bean이 여러 개 있으면 추가 지정이 필요할 수 있다.

📌 주요 역할

  • 필요한 의존 객체를 타입 기준으로 자동 주입한다.
  • 같은 타입의 Bean이 여러 개 있으면 @Qualifier로 구분할 수 있다.
  • 생성자, Setter, 필드에 적용할 수 있다.

📌 적용 위치

적용 위치 추천 정도 특징
생성자(Constructor) ✅ 권장 불변성과 의존 관계가 명확하다.
Setter 메서드 ⚠️ 주의 선택적 주입이나 재주입이 필요할 때 사용한다.
필드(Field) ❌ 비권장 테스트와 유지보수가 어렵다.

🧩 의존성 주입 방식

Constructor Injection

  • 가장 권장되는 방식이다.
  • 불변성을 유지하기 쉽고, 필요한 의존성을 명확하게 드러낼 수 있다.
@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

Setter Injection

  • 의존성 재주입이나 선택적 주입이 필요할 때 사용할 수 있다.
@Service
public class UserService {
    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

Field Injection

  • 코드가 짧아 보이지만 유지보수와 테스트에 불리하다.
  • 특별한 이유가 없다면 사용을 피하는 편이 좋다.
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
}

🔀 @Qualifier로 Bean 선택

  • 같은 타입의 Bean이 여러 개 있을 때 명시적으로 선택한다.
@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(@Qualifier("jdbcUserRepository") UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

📌 장점과 단점

장점

  • 자동 주입이 편리하다
  • 코드가 간결해진다
  • 의존 관계를 쉽게 연결할 수 있다

단점

  • 암묵적인 의존 관계가 생길 수 있다
  • Field Injection은 테스트와 유지보수에 불리하다

📌 정리

  • @Autowired는 Spring의 대표적인 의존성 주입 애너테이션이다.
  • 생성자 주입이 가장 권장된다.
  • 같은 타입 Bean이 여러 개일 때는 @Qualifier와 함께 사용한다.

연결문서

댓글남기기