Back-End/Spring

[Spring][스프링 기본편] - 23. 롬복(Lombok)과 최신 트렌드

얄루몬 2022. 1. 31. 10:06

💻본 포스팅은 '스프링 핵심 원리 - 기본편 김영한'님의 강의를 듣고 작성되었습니다.

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com


[롬복이란?]

자바에서 반복되는 메소드들을 줄여주기 위해서 사용되는 코드 다이어트를 위한 라이브러리로 반복되는 코드들의 대표적인 예시로는 아래와 같은 메소드들이 있다.

  • Getter
  • Setter
  • ToString

 

 

 

[롬복 설치법]

plugins {
	id 'org.springframework.boot' version '2.6.2'
	id 'io.spring.dependency-management' version '1.0.11.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'

}

test {
	useJUnitPlatform()
}
  • build.gradle에 Lombok관련된 것들을 위와 같이 작성해준다.

 

 

Intellij 롬복(Lombok) 설치 및 설정 방법

Intellij에서 Lombok 설정 방법에 대해 알아보겠습니다. Lombok은 자바 클래스에서 자주 사용하는 getter, setter 등을 어노테이션을 사용하여 반복되는 작업을 생략하도록 빌드 시점에 자동으로 생성해

leeys.tistory.com

  • 위의 티스토리에서 제공하는 방법을 똑같이 진행해서 플러그인을 다운 받고 어노테이션 활성화 설정을 켜주어야 합니다!

 

 

 

[왜 롬복을 사용할까??]

[final 키워드가 붙은 필드를 보고 생성자를 대신 생성&관리해준다.]

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
// 생성자를 만들어 놓지 않아도 final이 붙은 필드를 생성자로 자동으로 만들어주는 어노테이션!
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {
    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

    @Override
    public Order creatOrder(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;
    }
}
@RequiredArgsConstructor
  • 기존 코드는 생성자를 통한 의존관계 주입을 진행했지만 롬복에서 제공하는 위의 어노테이션이 이를 대신해준다.
    • 개발자가 생성자를 직접 만들지 않아도 어노테이션이 final 키워드가 붙은 필드를 보고 그 필드(속성)를 이용해서 생성자를 대신 생성해주고 관리해준다.

 

  • 이는 필드 변경이 있어도 개발자가 일일히 수정해야 하는 번거로움을 덜어주고 생성자를 작성하기 위해 코드를 손수 직접 다 작성해야하는 번거로움을 덜어준다.

 

[코드 다이어트를 돕는다.]

package hello.core;


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

@Getter
@Setter
@ToString
public class HelloLombok {
    private String name;
    private int age;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setName("asss");
        
        String name = helloLombok.getName();
        System.out.println("name = " + name);
    }

}
@Getter
@Setter
@ToString
  • Getter / Setter / ToString과 같이 반복해서 사용해야 하는 코드들을 줄여준다.
    • 위의 어노테이션들이 Get/Set/ToString과 같이 개발자들이 많이 사용하는 코드들을 직접 관리해주어서 굳이 작성해서 사용하지 않아도 된다.
  • 코드가 매우 간결해지고 깔끔해진다.