1. 생성자 주입

- final로 필드를 만들고, 생성자로 의존관계를 작성 => 작성할 코드가 많음

@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;
    }

    /*
    	비즈니스 로직
    */
}

 

2. 생성자가 1개니깐 @AutoWired생략 가능

@Component
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;
    }

    /*
    	비즈니스 로직
    */
}

 

3. Lombok적용

- Lombok의 @RequiredArgsConstructor를 사용하면 final이 붙은 필드들에 대한 생성자 코드를 자동으로 생성함

- 생성자 코드를 작성할 필요 없음

- final키워드 필드 + @AutoWired +생성자 1개 => @RequiredArgsConstructor

@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

    /*
    	비즈니스 로직
    */
}
@Component
@RequiredArgsConstructor
public class MemberServiceImpl implements MemberService{

   private final MemberRepository memberRepository;
   
   /*
   	비즈니스 로직
   */

    
}