생성자 주입을 적극 사용하여 프로젝트를 진행하면 코드 중복과 코드량을 최적화 할 필요가 느껴진다.
Table of Content
Lombok 라이브러리 주입
build.gradle 에 롬복 사용을 위해 외부 라이브러리 의존성을 추가해준다.
plugins {
id 'org.springframework.boot' version '2.7.6'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
// 롬복을 위한 추가부분1
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
// 롬복을 위한 추가부분2
//lombok 라이브러리
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test'){
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
tasks.named('test') {
useJUnitPlatform()
}
Java
복사
Lombok으로 리팩토링
OrderServiceImpl 부터 수정해본다. Lombok을 통해 많은 코드량을 줄여주지만 실제로는 class 파일에는 코드가 추가된다.
@RequiredArgsConstructor
해당 클래스의 final 필드를 포함한 생성자를 작성해준다.
기존코드
@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;
}
...
Java
복사
변경된 코드
@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
...
Java
복사
@RequiredArgsConstructor vs @AllArgsConstructor
실제로 두 어노테이션의 작동은 동일할 수 있지만 차이가 있다.
•
@RequiredArgsConstructor 초기화 되지 않은 final 필드와 @NonNull 어노테이션이 붙은 필드에 대한 생성자 생성
•
@AllArgsConstructor 모든 필드에 대한 생성자 생성
•
추가로 @NoArgsConsructor 는 파라미터가 없는 기본 생성자를 작성해준다.
@AllArgsConstructor 를 사용하면 모든게 해결될 것 같지만, 생성자에서 필요없는 필드가 존재하는 경우가 있기 때문에, 그리고 범위를 제한을 해둘수록 명시적인 오류를 찾기 쉬운 장점이 있어서 @RequiredArgsConstructor 가 유리한 상황이 있을 수 있다.
Related Posts
Search