이번에는 롬복과 최신 트렌드에 대하여 공부해보았다.
의존관계 주입을 자동으로 해줄 때 생성자 주입이 좋긴한데 코드가 많다
최근에는 롬복이란 라이브러리와 함께 사용한다.
막상 개발을 해보면, 대부분이 다 불변이고, 그래서 생성자에 final 키워드를 사용하게 된다.
그런데 생성자도 만들어야 하고, 주입 받은 값을 대입하는 코드도 만들어야 하고
필드주입처럼 좀 편리하게 사용하는 방법은 없을까?
이런 고민에서 시작되었다
package hello.core.order;
import hello.core.discount.DiscountPolicy;
import hello.core.member.Member;
import hello.core.member.MemberRepository;
import hello.core.member.MemoryMemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@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;
}
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
//Test
public MemberRepository getMemberRepository() {
return memberRepository;
}
}
이전 코드이다.
package hello.core.order;
import hello.core.discount.DiscountPolicy;
import hello.core.member.Member;
import hello.core.member.MemberRepository;
import hello.core.member.MemoryMemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
//Test
public MemberRepository getMemberRepository() {
return memberRepository;
}
}
롬복 적용후 코드이다.
코드가 매우 간단해졌다.
롬복 라이브러리가 제공하는 @RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서
생성자를 자동으로 만들어 준다.
위의 두 코드는 완전히 동일하다. 롬복이 자바의 애노테이션 프로세서라는 기능을 이용하여 컴파일 시점에
생성자 코드를 자동으로 생성해준다.
최근에는 생성자를 딱 1개를 두고 @Autowired 를 생략하는 방법을 주로 사용한다. 여기에 Lombok 라이브러리의
@RequiredArgsConstructor 를 사용하는 방법을 쓴다.
'웹프로그래밍 > Spring 핵심 원리' 카테고리의 다른 글
39. @Autowired 필드 명, @Qualifier, @Primary (0) | 2021.08.17 |
---|---|
38. 조회 빈이 2개 이상 - 문제 (0) | 2021.08.17 |
36. 생성자 주입을 선택하라 (0) | 2021.08.16 |
35. 옵션 처리 (0) | 2021.08.13 |
34. 다양한 의존관계 주입 방법 (0) | 2021.08.12 |