개발/java

[Spring 기본] 6. 의존관계 자동 주입

ebang 2024. 1. 6. 23:06
반응형
  1. 생성자
  2. 수정자 (setter)
  3. 필드 주입
  4. 메소드 주입

생성자 주입 사용하기

  • 추천
  • final 키워드와 함께 사용
    생성자 주입을 사용하면 필드에 final 키워드를 사용할 수 있다. 그래서 생성자에서 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아준다.

롬복 라이브러리 사용하기

  • getter, setter 어노테이션 제공
  • @RequiredArgsConstructor
    롬복 라이브러리가 제공하는 @RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다.
    (코드에는 보이지 않지만 실제 호출 가능하다.)
  • 최근에는 생성자를 딱 1개 두고, @Autowired 를 생략하는 방법을 주로 사용한다. 여기에 Lombok 라이브러리의@RequiredArgsConstructor 함께 사용하면 기능은 다 제공하면서, 코드는 깔끔하게 사용할 수 있다.

빈 타입이 중복될 때

  • @Autowired 는 타입으로 조회하기 때문에 에러가 발생한다.
  • @Autowired 동작 방식
    • 타입 매칭 -> 여러 빈이 있으면 필드 이름, 파라미터 이름으로 매칭한다.
  • @Autowired 필드 명 매칭
    • 필드 명을 보고 매칭한다.
  • @Qualifier 사용
    • @Qualifier 는 추가 구분자를 붙여주는 방법이다. 주입시 추가적인 방법을 제공하는 것
    • 빈 이름을 만드는 것은 아님
    • 생성자 파라미터에 @Qualifier(“내용”) 를 붙이고 사용
    • @Qulifier 끼리 사용한다. -> 빈 이름 매칭 -> noSuchBeanDefinitionException 예외발생
  • @Primary 사용
    • 여러 개 빈 중 최우선순위 지정 가능.
  • 우선순위 : @Qulifer -> @Primary (좁은 선택 범위가 우선순위가 더 높다. )

List, Map

실무에서의 사용

애플리케이션은 크게 업무 로직과 기술 지원 로직으로 나눌 수 있다.

  • 업무 로직 빈: 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포 지토리등이 모두 업무 로직이다. 보통 비즈니스 요구사항을 개발할 때 추가되거나 변경된다.
  • 기술 지원 빈: 기술적인 문제나 공통 관심사(AOP)를 처리할 때 주로 사용된다. 데이터베이스 연결이나, 공통 로그 처리 처럼 업무 로직을 지원하기 위한 하부 기술이나 공통 기술들이다.
  • 기술 지원 로직은 업무 로직과 비교해서 그 수가 매우 적고, 보통 애플리케이션 전반에 걸쳐서 광범위하게 영향을 미친다. 그리고 업무 로직은 문제가 발생했을 때 어디가 문제인지 명확하게 잘 드러나지만, 기술 지원 로직은 적용 이 잘 되고 있는지 아닌지 조차 파악하기 어려운 경우가 많다. 그래서 이런 기술 지원 로직들은 가급적 수동 빈 등 록을 사용해서 명확하게 드러내는 것이 좋다.
  • 애플리케이션에 광범위하게 영향을 미치는 기술 지원 객체는 수동 빈으로 등록해서 딱! 설정 정보에 바로 나타나게 하는 것이 유지보수 하기 좋다.
  • 정리
    • 편리한 자동 기능을 기본으로 사용하자
    • 직접 등록하는 기술 지원 객체는 수동 등록
    • 다형성을 적극 활용하는 비즈니스 로직은 수동 등록을 고민해보자
반응형