본문 바로가기

Java 오류 & 개발/Spring 오류 해결

[Spring] @Autowired와 @Inject 차이점 및 올바른 사용법

[Spring] @Autowired와 @Inject 차이점 및 올바른 사용법

1. @Autowired와 @Inject란?

Spring 프레임워크에서는 **의존성 주입(Dependency Injection, DI)** 을 통해 객체 간의 결합도를 낮추고, 유연한 코드 구조를 제공합니다.

Spring에서는 의존성 주입을 수행하기 위해 두 가지 주요 어노테이션을 제공합니다:

  • @Autowired (Spring 전용): Spring 프레임워크에서 제공하는 의존성 주입 어노테이션
  • @Inject (자바 표준 - JSR 330): Java 표준 의존성 주입 어노테이션 (javax.inject 패키지에서 제공)

2. @Autowired와 @Inject의 차이점

구분 @Autowired @Inject
제공 Spring 전용 (org.springframework.beans.factory.annotation) Java 표준 (javax.inject.Inject, JSR-330)
사용 가능 환경 Spring 전용 프로젝트 Spring 포함 Java EE 환경
기본 동작 타입(Type) 기반 자동 주입 Spring 컨테이너에서 자동 주입
필수 여부 기본적으로 필수 (required=true) 기본적으로 필수 아님
Spring 기능 지원 required=false 설정 가능 Spring 기능과 완벽히 연동되지 않음

3. @Autowired 사용 예제

기본 사용법 - 생성자 주입 방식


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired  // 생성자 주입
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void getUserInfo() {
        System.out.println("User info: " + userRepository.findUser());
    }
}

필수 주입이 아닌 경우 (required=false)


@Autowired(required = false)
private SomeService someService;

4. @Inject 사용 예제

@Inject는 자바 표준이지만, Spring에서도 사용할 수 있습니다.


import javax.inject.Inject;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserRepository userRepository;

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

📌 @Inject는 Spring에서 제공하는 기능을 완벽하게 활용할 수 없기 때문에 Spring 환경에서는 @Autowired를 더 권장합니다.


5. @Autowired와 @Inject 중 어떤 것을 사용해야 할까?

  • Spring 환경이라면 @Autowired 를 사용 → Spring의 추가 기능 지원 가능
  • Spring 외 Java EE 환경까지 고려해야 한다면 @Inject 를 사용할 수도 있음
  • Spring Boot와 함께 사용할 경우 @Autowired가 더 적합

📌 결론

Spring 기반 프로젝트에서는 @Autowired를 사용하는 것이 더 권장됩니다. @Inject도 사용 가능하지만, Spring의 추가 기능을 활용하지 못할 수 있습니다.

🔎 더 많은 Spring 관련 오류 해결 방법이 궁금하다면?

👉 Spring 오류 해결 가이드도 함께 확인하세요!