사랑하애오
article thumbnail

롬복

롬복(lombok)은 자바 클래스에 Getter, Setter, 생성자 등을 자동으로 만들어 주는 도구이다.
SBB 프로젝트를 진행하면서 데이터를 처리하기 위한 엔티티 클래스나 DTO 클래스등을 사용해야 하는데
이때 클래스의 속성들에 대한 Getter, Setter를 만들어야 한다.
물론 Getter, Setter 메서드를 직접 만들어도 되지만 롬복(lombok)을 사용하면 좀 더 깔끔한 소스코드를 만들수 있다.

 

롬복 설치

롬복을 사용하려면 플러그인을 먼저 설치 해야한다. 다음의 URL에서 롬복 플러그인을 다운로드하자.

https://projectlombok.org/download

 

Download

 

projectlombok.org

그리고 다운로드한 lombok.jar 파일을 다음과 같이 설치하자.

java -jar lombok.jar

그러면 다음과 같은 경고 메시지가 나타난다.

롬복 플러그인이 설치된 IDE를 찾을 수 없다는 경고 메시지이다. "확인"을 눌러 메시지창을 닫자. 그러면 다음과 같은 화면이 나타난다.

위 화면에서 다음 순서로 롬복을 설치하자.

  1. "Specify location"을 눌러 롬복 플러그인을 사용할 IDE가 설치된 경로를 선택한다.
  2. "Install / Update"를 눌러 롬복 플러그인을 설치한다.
  3. "Quit Installer"를 눌러 설치 프로그램을 종료한다.

그리고 VSCODE를 다시 시작한후 build.gradle 파일을 다음과 같이 수정하자.

(... 생략 ...)

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

(... 생략 ...)

롬복 관련 라이브러리를 설치하고 컴파일시 롬복이 적용되도록 했다.

build.gradle 파일을 수정한 후에는 반드시 우측하단에 now를 선택하여 라이브러리를 다운로드 해야 한다.

 

compileOnly

build.gradle 파일의 compileOnly는 해당 라이브러리가 컴파일 단계에서만 필요한 경우에 사용한다.

 

annotationProcessor

컴파일 단계에서 애너테이션을 분석하고 처리하기 위해 사용한다.

 

 

Getter, Setter

다음처럼 HelloLombok 클래스를 작성하여 롬복이 정상적으로 동작하는지 확인해 보자.

아래 코드 작성시 오류가 없어야 한다.

[파일명:/sbb/src/main/java/com/mysite/sbb/HelloLombok.java]

package com.mysite.sbb;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class HelloLombok {

    private String hello;
    private int lombok;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setHello("헬로");
        helloLombok.setLombok(5);

        System.out.println(helloLombok.getHello());
        System.out.println(helloLombok.getLombok());
    }
}

HelloLombok 클래스에 hello, lombok 2개의 속성을 추가한 후 클래스명 바로 위에
@Getter, @Setter라는 어노테이션을 적용했더니 Getter, Setter 메서드를 추가하지 않아도
setHello, setLombok, getHello, getLombok 등의 메서드를 사용할수 있게 되었다.

롬복으로 컴파일된 클래스에는 Getter와 Setter 메서드가 실제로 포함된다.

 

 

RequiredArgsConstructor

이번에는 HelloLombok 클래스를 다음과 같이 수정해 보자.

package com.mysite.sbb;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Getter
@Setter
public class HelloLombok {

    private final String hello;
    private final int lombok;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok("헬로", 5);
        System.out.println(helloLombok.getHello());
        System.out.println(helloLombok.getLombok());
    }
}

hello, lombok 속성에 final을 적용하고 롬복의 @RequiredArgsConstructor 어노테이션을 적용하면
해당 속성을 필요로하는 생성자가 롬복에 의해 자동으로 생성된다.
(※ final이 없는 속성은 생성자에 포함되지 않는다.)

final을 적용했기 때문에 @Setter는 의미가 없으며 Setter 메서드들도 사용할수 없다.
final은 한번 설정한 값을 변경할수 없게 하는 키워드이다.

즉, 다음과 같이 생성자를 직접 작성한 경우와 동일하다.

package com.mysite.sbb;

import lombok.Getter;

@Getter
public class HelloLombok {

    private final String hello;
    private final int lombok;

    public HelloLombok(String hello, int lombok) {
        this.hello = hello;
        this.lombok = lombok;
    }

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok("헬로", 5);
        System.out.println(helloLombok.getHello());
        System.out.println(helloLombok.getLombok());
    }
}

@RequiredArgsConstructor 어노테이션은 이후 진행되는 챕터에서 의존성 주입(Dependency Injection)시 사용된다.

DI(Dependency Injection) - 스프링이 객체를 대신 생성하여 주입한다.

profile

사랑하애오

@사랑하애

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!