FrameWork/Spring&Spring-boot
Spring 기본 24 - 롬복과 최신 트렌드
Surge100
2023. 11. 21. 13:34
롬복과 최신 트렌
막상 개발을 해보면 대부분 다 불변이고, 그래서 다음에 오는 코드와 같이 생성자에 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;
}
}
생성자가 딱 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;
}
}
- 이제 롬복을 적용해보자
- 롬복 라이브러리가 제공하는 @RequireArgConstructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다.(다음 코드에는 보이지 않지만 실제 호출 가능하다.)
- 최종 결과 코드는 간결하다.
최종 결과 코드
@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
}
이 최종결과 코드와 이전 코드는 완전히 동일하다. 롬복이 자바의 어노테이션 프로세서라는 기능을 이용해서 컴파일 시점에 생겅자 코드를 자동으로 생성해준다. 실제 class를 열어보면 다음 코드가 추가되어 있는 것을 확인 할 수있다.
정리
최근에는 생성자를 딱 1개 두고, @Autowired를 생략 하는 방법을 주로 사용한다. 여기에 Lomok라이브러리 @RequiredArgsConstructor 함께 사용하면 기능은 다 제공하면서, 코드는 깔끔하게 사용할 수 있다.
[출처 - 스프링 핵심 원리 - 기본편]