Spring 의존성 주입

전윤지·2021년 12월 30일
0

Spring

목록 보기
5/5

1. 의존성 주입 (DI : Dpendency Injection)

  • 객체를 직접 생성하는 것이 아닌, 외부에서 생성한 후 주입시키는 방식
    => spring이 알아서 객체를 주입해 줌
  • 모듈간의 결합도 낮춤. 유연성 높임.

2. 의존성 주입 방법

1) 생성자 주입 (Constructor Injection)

  • 생성자를 통해 의존성을 주입하는 방법
  • 생성자 주입은 생성자 호출 시점에 1회 호출되는 것이 보장
    => 주입받은 객체가 변하지 않거나, 반드시 객체의 주입이 필요한 경우 강제하기 위해 사용
  • 생성자가 1개만 있을 경우, @Autowired를 생략해도 주입이 가능함
  • Spring 프레임워크에서 가장 권장하는 방식
@Service
public class BoardService {
    private BoardDao boardDao;

    // 단일 생성자일 경우, @Autowired 생략 가능
    public BoardService(BoardDao boardDao) {
        this.boardDao = boardDao;
    }
}
@Service
// lombok을 사용해 생성자 주입
@AllArgsConstructor
public class BoardService {
    private BoardDao boardDao;
}

2) setter 주입 (Setter Injection)

  • setter를 통해 의존성 주입
  • setter에 @Autowired 어노테이션 붙임
  • setXXX를 public으로 설정해야 하므로, 언제 어디서든 변경이 가능하다는 단점이 있음
@Service
public class OrderService {
  private DiscountPolicy discountPolicy;
 
  @Autowired
  public void setDiscountPolicy(DiscountPolicy discountPolicy) {
  	this.discountPolicy = discountPolicy;
  }
}

3) 필드 주입 (Field Injection)

  • 가장 간단한 방식이나, 권장되지 않는 방식.
  • 주입되는 필드에 @Autowired 어노테이션 붙임
  • 외부에서 변경이 불가능 => 테스트하기 힘들다는 단점있음
  • 의존 관계가 눈에 잘 보이지 않아 추상적 => 의존성 관계가 과도하게 복잡해질 수 있음
@Service
public class OrderService {
 
  @Autowired
  private DiscountPolicy discountPolicy;
}

0개의 댓글