목차
@RequiredArgsContructor
https://wngml56.tistory.com/188
스프링부트에서 의존관계를 자동으로 주입할 때, 4가지 방법 중 생성자 주입을 권장합니다.
그러기 위해선 생성자를 만들어야 하고, 주입 받은 값을 대입하는 코드를 직접 작성해야 합니다.
여기서 롬복을 사용하면, 필드 주입처럼 편리하게 작성할 수 있습니다.
생성자 주입 기존 코드
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
@Autowired 생략
생성자가 1개 있으면 @Autowired 를 생략할 수 있습니다.
@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;
}
}
롬복 라이브러리가 제공하는 @RequiredArgsContructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어줍니다. (코드에는 보이지 않지만 실체 호출이 가능합니다.)
롬복 적용
@Component
@RequiredArgsConstructor
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;
}
롬복이 자바의 애노테이션 프로세서라는 기능을 이용해 컴파일 시점에 final이 붙은 필드를 모아 자동으로 생성자 코드를 생성해줍니다. 실제 class 를 열어보면 위의 코드가 추가되어 있는 것을 확인할 수 있습니다.
정리
최근에는 생성자를 1개만 두고 @Autowired를 생략하는 방법을 주로 사용합니다.
여기에 Lombok 라이브러리의 @RequiredArgsConstructor 를 함께 사용하면 기능은 모두 제공하면서 코드는 깔끔하게 사용할 수 있습니다.
의존관계를 하나 추가할 때도 굉장히 편리합니다.
롬복 라이브러리 적용 방법
build.gradle 에 라이브러리 및 환경을 추가합니다.
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.11'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
//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'
}
tasks.named('test') {
useJUnitPlatform()
}
※ 코끼리 누르기
※ https://start.spring.io/ 에서 프로젝트를 생성할 때, Lombok 플러그인을 선택하는 방법도 있습니다.
롬복 플러그인이 안깔려 있는 경우
- mac : Preference(window: File → Settings) → plugins → lombok 검색 후 설치 실행 (재시작)
2. mac : Preference(window: File → Settings) → Annotation Processors 검색 → Enable annotation processing 체크 (재시작)
3. 임의의 테스트 클래스를 만들고 @Getter, @Setter 확인
package hello.core;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class HelloLombok {
private String name;
private int age;
public static void main(String[] args) {
HelloLombok helloLombok = new HelloLombok();
helloLombok.setName("이주희");
String name = helloLombok.getName();
System.out.println("name= " + name);
}
}
출처
'Backend > Spring | SpringBoot' 카테고리의 다른 글
[SpringBoot] DL (ObjectProvider, JSR-330 Provider) (0) | 2023.07.10 |
---|---|
[SpringBoot] 빈 스코프 (싱글톤과 프로토타입 스코프) (0) | 2023.07.09 |
[SpringBoot] 초기화 및 소멸전 콜백 메서드 (0) | 2023.07.02 |
[SpringBoot] @Autowired 매칭한 빈이 2개 이상일 때 해결방안 (0) | 2023.06.24 |
[SpringBoot] 자동 의존관계 주입 방법 4가지 (0) | 2023.06.24 |