슬픈 야옹이 2024. 5. 26. 19:52

 

빈의 구성 방식은 대부분 비슷하기 때문에, 생성자 작성과 의존성 주입 코드 작성은 생각보다 반복적인 작업이다.

 

롬복 라이브러리를 이용하면 이러한 작업을 간편하게 수행할 수 있다.

 

 

 

롬복 적용 방법 (IntelliJ IDEA 기준)

build.gradle에 라이브러리와 환경 설정을 추가한다.

plugins {
    ...
}

group = 'hdxian'
version = '0.0.1-SNAPSHOT'

java {
    ...
}

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

repositories {
    ...
}

dependencies {
    ...

    // lombok 라이브러리 추가 (시작)
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    testCompileOnly 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
    // lombok 라이브러리 추가 (끝)
    
    ...

}

tasks.named('test') {
    ...
}

 

 

[File] -> [settings] -> [Plugins]에서 lombok을 설치 및 추가한다.

lombok 추가

 

[File] -> [settings] -> [Build, Execution, Deployment] -> [Annotation Processors]로 이동하여

 

"Enable annotation processing" 을 체크한다.

Enable annotation processing 체크

 

 

 

@RequiredArgsConstructor

 

롬복 라이브러리를 이용하면 생성자 주입 방식을 간편하게 적용할 수 있다.

 

기존 코드가 다음과 같을 때,

@Component
public class OrderServiceImpl implements OrderService {

    private final MemberRepository memberRepository;

    private final DiscountPolicy discountPolicy;

    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }
    
}

 

 

클래스 선언부에 @RequiredArgConstructor를 붙이면 생성자를 생략할 수 있다.

@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {

    private final MemberRepository memberRepository;

    private final DiscountPolicy discountPolicy;
    
}

 

@RequiredArgConstructor는 final 키워드가 붙은 필드들을 파라미터로 받는 생성자를 자동으로 생성해주는데,

 

생성자가 유일하면 @Autowired를 생략 가능하므로 생성자 주입 방식을 간편하게 적용할 수 있다.

 

그 외에도 @Getter,@Setter를 클래스 선언부에 붙이면 getter, setter 메서드를 자동으로 붙여주어 코드 작성을 생략할 수 있다.