이번에는 롬복과 최신 트렌드에 대하여 공부해보았다.

 

의존관계 주입을 자동으로 해줄 때 생성자 주입이 좋긴한데 코드가 많다

최근에는 롬복이란 라이브러리와 함께 사용한다.

 

막상 개발을 해보면, 대부분이 다 불변이고, 그래서 생성자에 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 를 사용하는 방법을 쓴다.

+ Recent posts