의존관계 자동주입

Mina Park·2023년 10월 15일

의존관계를 주입하는 방법은 크게 4가지가 있으며, 각각 아래와 같은 특징이 있음


  1. 생성자 주입
  • 가장 흔하게 사용하는 방법
  • 특징
    • 호출시점에 딱 1번만 호출되는 것이 보장됨
    • 따라서 "불변, 필수" 의존관계에서 사용
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy
discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
  1. 수정자 주입(Setter)
  • 필드의 값을 변경하는 수정자 메소드를 통해 의존관계를 주입
  • 특징
    • "선택, 변경" 가능성이 있는 의존관계에 사용
@Component
public class OrderServiceImpl implements OrderService {
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Autowired
public void setDiscountPolicy(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
}
  1. 필드 주입
  • 코드가 간결하다는 장점이 있지만 외부에서 변경이 불가하다는 단점이 있음
  • 가급적이면 사용을 지양할 것
@Component
public class OrderServiceImpl implements OrderService {
@Autowired
private MemberRepository memberRepository;
@Autowired
private DiscountPolicy discountPolicy;
}
  1. 일반 메소드 주입
  • 일반 메소드를 통해 주입하는 방식이나, 일반적으로 잘 사용하지는 않음
  • 한번에 여러 필드를 주입할 수 있음
@Component
public class OrderServiceImpl implements OrderService {
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void init(MemberRepository memberRepository, DiscountPolicy
discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}

우리 서비스 코드의 대부분은 3번 필드 주입 방식을 사용하고 있었는데.. 살펴볼 필요가 있을 것 같다

0개의 댓글