의존관계 자동 주입

inho ha·2022년 4월 17일
0

스프링 핵심 원리

목록 보기
5/7

의존관계 주입 방법

  1. 생성자 주입

생성자 호출시점에 딱 1번만 호출되는 것이 보장됨
주로 불변, 필수 의존관계에 사용
생성자만 통해서 주입시 버그 발생해도 원인을 쉽게 파악 가능
생성자가 딱 1개만 있으면 @Autowired 생략해도 자동으로 의존관계 주입해줌

  1. 수정자(setter) 주입

setter 메서드에 @Autowired 하는 방법
선택, 변경 의존관계에 사용
@Autowired(required = false) 로 선택가능
주입할 대상이 없으면 오류인데 @Autowired(required = false) 을 사용하면 대상이 없어도 동작한다.

  1. 필드 주입

필드에 바로 주입하는 방법

외부에서 변경이 불가능해서 테스트 하기 힘들다

  1. 일반 메서드 주입

일반 메서드에 @Autowired 하는 방법
한번에 여러 필드를 주입 받을 수 있다
일반적으로 잘 사용하지 않는다

옵션 처리

@Autowired(required = false) : 자동 주입할 대상이 없으면 수정자 메서드 호출이 안됨

@Nullable : 자동 주입할 대상이 없으면 null로 들어감

Optional<> : 자동 주입할 대상이 없으면 Optional.empty 로 들어감

생성자 주입 좋은점

대부분의 의존관계 주입은 애플리케이션 종료시점까지 의존관계를 변경할 일이 없고 대부분 변해서는 안된다
누군가 실수로 변경하지 못하도록 생성자 주입 사용
생성자 주입은 객체를 생성할 때 딱 1번만 호출되므로 이후에 호출되는 일이 없다.

final 키워드를 사용하여 생성자에서 값이 설정되지 않는 오류를 컴파일 시점에서 막아준다.

롬복

@Getter : getter 메서드 생성해줌
@Setter : setter 메서드 생성해줌
@RequiredArgsConstructor : final 이 붙은 필드를 초기화 해주는 생성자를 만들어줌

롬북은 컴파일 시점에 코드들을 자동으로 생성해줌

조회 대상 빈이 2개 이상일때

  1. @Autowired 필드명 매칭

@Autowired 된 메서드의 필드명과 일치하는 빈 이름을 선택한다

  1. @Qualifier

추가 구분자를 붙여주는 방법
의존관계 주입시 추가적인 방법을 제공하는 것이고 빈 이름을 변경하는 것은 아니다
@Autowired 된 메서드의 필드 옆에 @Qualifier("123") 를 달고 클래스에도 @Qualifier("123")을 달면 해당 클래스로 의존관계 주입해줌
해당 클래스가 없으면 빈 이름과 비교해서 찾아본다

  1. @Primary

우선 순위를 부여하는 방식
@Primary 가 붙은 빈을 우선으로 의존관계 주입한다

코드에서 자주 사용하는 메인 DB의 커넥션을 획들하는 스프링 빈이 있고 특변한 기능으로 가끔 사용하는 서브 DB의 커넥션을 획등하는 스프링 빈이 있는 경우
메인은 @Primary, 서브는 @Qualifier 사용

의존관계 주입 자동 수동 실무 운영 기준

자동 기능이 편리하기 때문에 기본으로 사용

수동을 사용하면 좋은 경우는
기술 지원 빈
혹은 비즈니스 로직 중에서 다형성을 적극 활용할 때

profile
iha / ian / inho ha

0개의 댓글