@Autowired

코딩냥이·2024년 9월 10일

Annotation

목록 보기
2/34

@Autowired

@Autowired는 스프링 프레임워크에서 의존성 주입(Dependency Injection)을 위해 사용되는 핵심 어노테이션입니다.

기능

  • 스프링 컨테이너가 자동으로 해당 타입의 빈(Bean)을 찾아 주입합니다.
  • 생성자, 필드, 세터 메소드에 사용할 수 있습니다.

사용 방법

1. 필드 주입

@Component
public class UserService {
    @Autowired
    private UserRepository userRepository;
}

2. 생성자 주입

@Component
public class UserService {
    private final UserRepository userRepository;

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

3. 세터 메소드 주입

@Component
public class UserService {
    private UserRepository userRepository;

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

주요 특징

  1. 타입 기반 주입: 기본적으로 타입을 기준으로 빈을 찾아 주입합니다.
  2. 옵션 설정: required = false 옵션을 통해 주입할 빈이 없어도 예외가 발생하지 않도록 할 수 있습니다.
    @Autowired(required = false)
    private OptionalDependency dependency;
  3. 컬렉션 주입: 동일한 타입의 여러 빈을 주입받을 수 있습니다.
    @Autowired
    private List<SomeInterface> implementations;

주의사항

  1. 순환 참조: 두 클래스가 서로를 참조하는 경우 순환 참조 문제가 발생할 수 있습니다.
  2. 단일 책임 원칙: 너무 많은 의존성을 주입받는 클래스는 단일 책임 원칙을 위반할 수 있습니다.
  3. 테스트 용이성: 필드 주입을 사용하면 단위 테스트 시 의존성을 주입하기 어려울 수 있습니다.

베스트 프랙티스

  1. 생성자 주입을 선호합니다. 이는 불변성을 보장하고 필수 의존성을 명확히 합니다.
  2. 스프링 4.3 이상에서는 단일 생성자의 경우 @Autowired를 생략할 수 있습니다.
  3. 선택적 의존성의 경우에만 세터 주입을 고려합니다.
  4. 필드 주입은 간단하지만, 테스트와 불변성 측면에서 단점이 있으므로 주의해서 사용합니다.

결론

@Autowired는 스프링의 강력한 의존성 주입 기능을 제공하지만, 적절히 사용하지 않으면 애플리케이션의 구조와 테스트 용이성에 영향을 줄 수 있습니다. 상황에 맞는 주입 방식을 선택하고, 클래스의 책임을 명확히 하는 것이 중요합니다.

연관 포스팅

@Component
@Configuration
@Bean
@RequiredArgsConstructor
@Service
@Repository

profile
HelloMeow~!

0개의 댓글