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 함께 사용하면 기능은 다 제공하면서, 코드는 깔끔하게 사용할 수 있다.

 

 

 

[출처 - 스프링 핵심 원리 - 기본편]