Spring/스프링 핵심 원리 - 기본편

[의존 관계 자동 주입] Lombok 적용하는 방법

alsruds 2023. 12. 20. 18:29
🧐강의🧐
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

💡IntelliJ 설정 변경하기

· build.gradle 에 Lombok 추가 & gradle refresh

...

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

dependencies {
 	...

 	compileOnly 'org.projectlombok:lombok'
 	annotationProcessor 'org.projectlombok:lombok'

	testCompileOnly 'org.projectlombok:lombok'
 	testAnnotationProcessor 'org.projectlombok:lombok'
}

...

 

· Lombok 플러그인 설치

 

· Annotation Processors 활성화

 

 

TEST

@Getter
@Setter
@ToString
public class HelloLombok {

    private String name;
    private int age;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        // Setter
        helloLombok.setName("alsrud");
        // Getter
        String name = helloLombok.getName();
        System.out.println("name = " + name);
        // ToString
        System.out.println("helloLombok = " + helloLombok);
    }
}

 

💡Lombok 으로 코드 최적화하기 (OrderServiceImpl)

· 기존 코드

...
@Component
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

    @Autowired // 생성자 1개일 땐 생략 가능
    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }

    ...
}

 

· 변경된 코드

☑️ Lombok 라이브러리가 제공하는 @RequiredArgsConstructor 기능이 final 이 붙은 필드들의 생성자 자동 생성

@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

    // lombok 의 @RequiredArgsConstructor 가 자동으로 만들어줌
//    @Autowired
//    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
//        this.memberRepository = memberRepository;
//        this.discountPolicy = discountPolicy;
//    }

    ...
}

 

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