[Spring] Lombok

Narcoker·2023년 8월 14일

Spring

목록 보기
13/19

롬복 사용을 위한 초기 세팅

build.gradle 에 라이브러리 및 환경 추가 후 gradle 업데이트

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.2'
	id 'io.spring.dependency-management' version '1.1.2'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

// 추가
configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}
//

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	
    // 추가
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
	//
}

tasks.named('test') {
	useJUnitPlatform()
}

외부 라이브러리에서 lombok 설치 됐는지 확인

설정 -> 플러그인 -> Lombok 검색 -> 설치

설정 -> 컴파일러 -> 어노테이션 프로세서 -> 어노테이션 처리 활성화 체크

테스트

HelloLombok.java

package hello.core;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter // Getter 자동 생성
@Setter // Setter 자동 생성
@ToString // ToString 자동 생성
public class HelloLombok {
    private String name;
    private int age;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setName("asdfsadf");
        helloLombok.setAge(10);
        System.out.println("helloLombok.toString() = " + helloLombok.toString());
    }
}
[출력]
helloLombok.toString() = HelloLombok(name=asdfsadf, age=10)

스프링에서 활용하는 방법

기존 코드 - OrderServiceImpl

package hello.core.order;

import hello.core.discount.DiscountPolicy;
import hello.core.member.Member;
import hello.core.member.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@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;
    }

    @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);
    }
}

Lombok 사용

package hello.core.order;

import hello.core.discount.DiscountPolicy;
import hello.core.member.Member;
import hello.core.member.MemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
@RequiredArgsConstructor // final이 붙은 필드를 모아서 생성자를 자동으로 만들어주는 롬복 어노테이션
public class OrderServiceImpl implements OrderService{
    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);
    }
} 
profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글