-
Spring 기본 24 - 롬복과 최신 트렌드FrameWork/Spring&Spring-boot 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 함께 사용하면 기능은 다 제공하면서, 코드는 깔끔하게 사용할 수 있다.
[출처 - 스프링 핵심 원리 - 기본편]
'FrameWork > Spring&Spring-boot' 카테고리의 다른 글
Spring 기본 26 - 애노테이션 직접 만들기 (0) 2023.11.22 Spring 기본 25 - 조회 빈 2개 이상(@Autowired필드 명,@Quilifier,@Primary) (1) 2023.11.22 스프링 기본 23 - 생성자 주입을 선택해라 (0) 2023.11.21 스프링 기본 22- 옵션 처리 (1) 2023.11.21 스프링 기본 21 - 의존관계 자동 주입 (0) 2023.11.21