본문 바로가기
[인프런] 김영한의 스프링 완전 정복/0. 스프링 핵심 원리 - 기본편

[스프링 핵심 원리 - 기본편] 5. 롬복(Lombok)

by NJ94 2023. 11. 30.

https://projectlombok.org/

 

Project Lombok

 

projectlombok.org

롬복(Lombok)은 자바 프로그래밍에서 반복적이고 장황한 코드를 줄여주는 라이브러리입니다. 주로 게터(Getter), 세터(Setter), 생성자(Constructor), Equals, HashCode 등의 메서드를 자동으로 생성하여 개발자가 이를 일일이 작성하지 않아도 되도록 돕습니다.

 

주요 기능으로는 다음과 같은 것들이 있습니다:

 

  1. 애노테이션을 통한 코드 생성: 롬복은 @Getter, @Setter, @ToString, @EqualsAndHashCode, @NoArgsConstructor, @AllArgsConstructor 등의 애노테이션을 제공합니다. 클래스나 필드에 이러한 애노테이션을 적용함으로써 해당 기능을 자동으로 생성합니다.
  2. 불변(Immutable) 객체 생성: @Value 애노테이션을 사용하여 불변 객체(Immutable Object)를 생성할 수 있습니다. 불변 객체는 한 번 생성되면 내부의 상태를 변경할 수 없는 객체를 의미합니다.
  3. 코드의 간결성: 롬복을 사용하면 보일러플레이트(boilerplate) 코드를 제거하여 코드의 양을 줄여줍니다. 이는 코드의 가독성을 향상시키고 유지보수성을 높여줍니다.

 

롬복을 사용하면 자주 사용되는 메서드들을 애노테이션으로 간단히 표시하여, 컴파일 시점에 해당 메서드들을 자동으로 생성해줍니다. 이를 통해 반복되는 코드 작성을 줄이고, 코드를 간결하게 유지할 수 있습니다.

 

 

@Getter, @Setter

@Getter @Setter 애노테이션을 사용하여 name age 필드에 대한 Getter 및 Setter 메서드를 자동으로 생성합니다.

import lombok.Getter;
import lombok.Setter;

public class User {
    @Getter @Setter private String name;
    @Getter @Setter private int age;
}

 

@ToString

@ToString 애노테이션은 클래스 내의 모든 필드를 포함한 문자열 표현을 자동으로 생성합니다.

import lombok.ToString;

@ToString
public class Book {
    private String title;
    private String author;
}

 

@RequiredArgsConstructor

@RequiredArgsConstructor 애너테이션은 final로 선언된 필드에 대한 생성자를 자동으로 생성해줍니다. 따라서 name과 age 필드는 final로 선언되어 있으므로 해당 필드를 인자로 받는 생성자가 자동으로 생성됩니다.

 

하지만 occupation 필드는 final로 선언되어 있지 않기 때문에 이 필드는 생성자에 포함되지 않습니다. 그래서 occupation 필드에 대한 생성자 파라미터는 생성되지 않습니다.

 

이렇게 @RequiredArgsConstructor를 사용하면 코드의 가독성을 높이고, 생성자를 간단하게 작성할 수 있습니다. 생성자에 포함시키고 싶은 필드를 final로 선언하여 해당 애너테이션을 통해 편리하게 생성자를 만들 수 있습니다.

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class Person {
    private final String name;
    private final int age;
    private String occupation;
    
    // occupation 필드는 포함되지 않음
    
    // name과 age 필드에 대한 생성자가 자동으로 생성됨
}

 

@NoArgsConstructor, @AllArgsConstructor 

@NoArgsConstructor는 파라미터 없는 기본 생성자를, @AllArgsConstructor는 모든 필드를 인자로 받는 생성자를 자동으로 생성합니다.

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
public class Car {
    private String make;
    private String model;
    private int year;
}

 

@Value (불변 객체):

@Value 애노테이션은 불변한(Immutable) 객체를 생성하며, 모든 필드를 final로 선언하여 한 번 생성된 후에는 내부 상태를 변경할 수 없습니다.

import lombok.Value;

@Value
public class Point {
    private final int x;
    private final int y;
}

 

롬복 세팅

아래의 순서대로 세팅 시, 롬복 사용 가능.

 

1. build.gradle

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

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

//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'
	}
}

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

 

2. Lombok 설치

 

3. Annotation Processors 설정 켜야지만, 인텔리제이에서 사용 가능

 

4. 결과

package com.example.basic;

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("A");
        helloLombok.setAge(10);

        System.out.println(helloLombok.getName()); //A
        System.out.println(helloLombok.getAge()); //10

    }
}