스프링 기본 - 롬복과 최신 트랜드
롬복과 최신 트랜드
막상 개발을 해보면, 대부분이 다 불변이고, 그래서 다음과 같이 생성자에 final 키워드를 사용하게 된다.
그런데 생성자도 만들어야 하고, 주입 받은 값을 대입하는 코드도 만들어야 하고...
필드 주입처럼 좀 편리하게 사용하는 방법은 없을까?
다음 기본 코드를 최적화해보자.
기본 코드
생성자가 딱 1개만 있으면 @Autowired를 생략할 수 있다.
- 이제 롬복을 적용해보자. 롬복 라이브러리 적용 방법은 아래에 적어두었다.
- 롬복 라이브러리가 제공하는 @RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다. (다음 코드에는 보이지 않지만 실제 호출 가능하다.)
- 최종 결과는 다음과 같다. 정말 간결하지 않은가!!
최종 결과 코드
이 최종 결과 코드와 이전의 코드는 완전히 동일하다. 롬복이 자바의 애노테이션 프로세서라는 기능을 이용해서 컴파일 시점에 생성자 코드를 자동으로 생성해준다. 실제 class를 열어보면 다음 코드가 추가되어 있는 것을 확인할 수 있다.
@RequiredArgsConstructor는 final이 붙은 필수값들의 생성자를 자동으로 만들어준다.
현재 객체(OrderServiceImpl)에 final이 붙은 MemberRepository, DiscountPolicy를 파라미터로 받는 생성자를 만들어준다.
맥 기준으로 command+f12 를 눌러서 확인해보면,
이렇게 MemberRepository와 DiscountPolicy가 생성자로 만들어져 있다.
가끔 생성자가 직접 필요할 때가 있을 수 있는데, 그럴때는 롬복을 사용하지 말고 직접 생성자를 만들면 된다.
정리
최근에는 생성자를 딱 1개 두고, @Autowired를 생략하는 방법을 주로 사용한다. 여기에 Lombok라이브러리의 @RequiredArgsConstructor 함께 사용하면 기능은 다 제공하면서, 코드는 깔끔하게 사용할 수 있다.
롬복 라이브러리 적용 방법
build.gradle에 라이브러리 및 환경 추가
plugins {
id 'org.springframework.boot' version '2.3.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
//lombok 설정 추가 시작
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
//lombok 설정 추가 끝
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
//lombok 라이브러리 추가 시작
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
//lombok 라이브러리 추가 끝
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
- Preference(윈도우 File → Settings) → plugin → lombok 검색 설치 실행 (재시작)
- Preference → Annotation Processors검색 → Enable annotation processing 체크 (재시작)
- 임의의 테스트 클래스를 만들고 @Getter, @Setter 확인
'Spring' 카테고리의 다른 글
스프링 기본 - @Autowired 필드 명, @Qualifier, @Primary (0) | 2022.06.03 |
---|---|
스프링 기본 - 조회 빈이 2개 이상 - 문제 (0) | 2022.06.03 |
스프링 기본 - 생성자 주입을 선택해라! (0) | 2022.06.02 |
스프링 기본 - 옵션 처리 (0) | 2022.06.02 |
스프링 기본 - 다양한 의존관계 주입방법 (0) | 2022.06.02 |
댓글
이 글 공유하기
다른 글
-
스프링 기본 - @Autowired 필드 명, @Qualifier, @Primary
스프링 기본 - @Autowired 필드 명, @Qualifier, @Primary
2022.06.03 -
스프링 기본 - 조회 빈이 2개 이상 - 문제
스프링 기본 - 조회 빈이 2개 이상 - 문제
2022.06.03 -
스프링 기본 - 생성자 주입을 선택해라!
스프링 기본 - 생성자 주입을 선택해라!
2022.06.02 -
스프링 기본 - 옵션 처리
스프링 기본 - 옵션 처리
2022.06.02