Backend/Spring

[섹션 7] 롬북과 최신 트랜드

지미닝 2024. 3. 18. 20:50

본 게시물은 김영한 선생님의 강의를 학습하며 작성하였습니다.

막상 개발을 해보면, 대부분이 다 불변이고, 그래서 생성자에 final 키워드를 사용하게 된다.

🤔 그러나 생성자도 만들어야 하고, 주입 받은 값을 대입하는 코드도 만들어야 하고… 필드 주입처럼 간편하게 사용하는 방법은 없을까?!

아래 코드를 최적화하도록 해보겠다.

  • 롬북 라이브러리 셋팅
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()
}
  • 롬복 간단 체험
package com.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("hello");
        helloLombok.getName();
    }
}
  • 이거 정말 미쳤다
  • RequiredArgsConstructor : final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다.
package com.hello.core.order;

import com.hello.core.discount.DiscountPolicy;
import com.hello.core.member.Member;
import com.hello.core.member.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {

    // final 키워드를 통해서 생성자에서만 값을 정할 수 있게 해준다.
    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

    @Override
    public Order createOrder(Long memberId, String itemName, int itemPrice) {
        Member member = memberRepository.findById(memberId);
        int discountPrice = discountPolicy.discount(member, itemPrice);

        return new Order(memberId, itemName, itemPrice, discountPrice);
    }

    //테스트 용도
    public MemberRepository getMemberRepository() {
        return memberRepository;
    }
}

롬북이 자바의 애노테이션 프로세서라는 기능을 이용해서 컴파일 시점에 생성자 코드를 자동으로 생성해준다.

정리
최근에는 생성자를 딱 1개 두고, @Autowired를 생략하는 방법을 주로 사용한다. 여기에 Lombok라이브러리의 @RequiredArgsConstructor함께 사용하면 기능은 다 제공하면서, 코드를 깔끔하게 사용할 수 있다.