필드 주입
필드에 바로 주입하는 방법이다.
- 코드가 간결해 많은 개발자들을 유혹하지만 외부에서 변경이 불가능해서 테스트하기 힘들다는 치명적인 단점이 있다.
- DI 프레임 워크가 없으면 아무것도 할 수 없다.
- 사용하지 않는것을 권장한다.
public class OrderServiceImpl implements OrderService {
@Autowired
private MemberRepository memberRepository;
@Autowired
private DiscountPolicy discountPolicy;
}
수정자(setter) 주입
setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법이다.
- 선택, 변경 가능성이 있는 의존관계에 사용
public class OrderServiceImpl implements OrderService {
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
public void setDiscountPolicy(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
}
생성자 주입
생성자를 통해서 의존 관계를 주입받는 방법이다.
- 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다.
- 불변, 필수 의존관계에 사용한다.
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
결론
애플리케이션을 개발할 때 의존성을 변경하는 경우는 거의 없다.
변경 가능성이 있는 setter는 웬만해서는 열지 않는 것을 추천하므로 의존성 주입은 되도록 생성자 주입을 사용하자.
'백엔드 > Spring' 카테고리의 다른 글
BeanValidation 써보기 (0) | 2023.09.22 |
---|---|
@ModelAttribute 와 @RequestBody 써보기 (0) | 2023.09.21 |
DispatcherServlet (0) | 2023.08.01 |
Thread Pool (0) | 2023.07.25 |
Servlet (0) | 2023.07.25 |