[스프링 핵심 원리 - 기본편] 롬복과 최신 트렌드

Hyeonjun·2022년 9월 30일
0
post-thumbnail

생성자 주입을 최적화 해보자.

롬복 설치

  1. build.gradle 세팅
...

//lombok 설정 추가 시작
configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

...

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'

	//lombok 라이브러리 추가 시작
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
	//lombok 라이브러리 추가 끝

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
  1. Plugin 설치

  1. Annotation Processing Enable

HelloLombok

@Getter @Setter
public class HelloLombok {

    private String name;
    private int age;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setName("name");

        String name = helloLombok.getName();
        System.out.println("name = " + name);
    }
}
  • @Getter, @Setter, @XxxArgsContructor, @ToString 등 다양한 롬복 어노테이션으로 코드를 줄일 수 있음.

코드 최적화

기존 코드

@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;
    }

		...
}

@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;
    }

		...
}
  • 생성자가 단 1개만 있다면 @Autowired를 생략할 수 있다.

Lombok 사용

@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

		...
}
  • 롬복 라이브러리가 제공하는 @RequiredArgsConstructor기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다.
  • 이 코드가 이전의 코드와 완전히 동일하다.
    • 롬복이 자바의 어노테이션 프로세서라는 기능을 이용해서 컴파일 시점에 생성자 코드를 자동으로 생성해준다.
    • 실제 class를 열어주면 코드가 추가되어 있다.

정리

  • 최근에는 생성자를 딱 1개 두고, @Autowired를 생략하는 방법을 주로 사용한다.
  • 여기에 Lombok 라이브러리의 @RequiredArgsConstructor를 함께 사용하면 기능은 모두 제공하면서 코드는 깔끔하게 관리할 수 있다.
profile
더 나은 성취

0개의 댓글