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 을 함께 사용 시, 기능은 모두 제공하면서 깔끔한 코드를 사용할 수 있다.