Blog

[SpringCore] 롬복을 활용한 리팩토링

Category
Author
citeFred
citeFred
Tags
PinOnMain
1 more property
생성자 주입을 적극 사용하여 프로젝트를 진행하면 코드 중복과 코드량을 최적화 할 필요가 느껴진다.
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 가 유리한 상황이 있을 수 있다.
Search
 | Main Page | Category |  Tags | About Me | Contact | Portfolio