environment
variables
What ?
Lomboksddd
dddfs
롬복(Lombok) 라이브러리는 소스 코드를 작성할 때 자바 클래스에 애너테이션을 사용하여 자주 쓰는 Getter 메서드, Setter 메서드, 생성자 등을 자동으로 만들어 주는 도구이다.
Getter, Setter 메서드는 자바 클래스의 속성값을 읽거나 저장할 때 사용한다. 이 메서드의 쓰임은 2-04절에서 더 자세히 살펴보자.
이제 SBB 프로그램을 만들면서 게시물과 관련된 데이터를 처리하기 위해 엔티티 클래스나 DTO 클래스 등을 사용해야 하는데 그러기 위해서는 먼저 이 클래스들의 속성값을 읽고 저장하는 Getter, Setter 메서드를 만들어야 한다. 물론 Getter, Setter 메서드를 직접 작성해도 되지만 롬복을 사용하면 좀 더 짧고 깔끔한 소스 코드를 만들 수 있다.
엔티티 클래스는 데이터베이스에 데이터를 저장하고 조회하기 위한 클래스이고 DTO 클래스는 데이터 베이스로 조회한 데이터들을 관리하기 위한 클래스이다. 엔티티에 관한 내용은 2-04절에서, DTO에 관한 내용은 2-09에서 다룰 것이다.
1) 롬복을 사용하려면 먼저 플러그인을 설치해야 한다. 다음 URL에서 롬복 플러그인을 내려 받자.
플러그인(plug-in)이란 응용 프로그램에 추가 기능을 연결하고 확장하는 데 사용하는 소프트웨어 모듈이다.
https://projectlombok.org/download

2) 내려받은 lombok.jar 파일을 명령 프롬프트 창에서 다음과 같이 설치하자. lombok.jar 파일이 있는 위치로 이동한 후, 다음 명령을 실행해야 한다. 여기서는 ‘Downloads’ 폴더에 lombok.jar 파일이 있으므로, 다음과 같이 입력했다.
java -jar lombok.jar

내려받은 lombok.jar 파일을 더블클릭해도 설치할 수 있다.
3) 다음과 같은 설치 창이 등장했다면 [Specify location]을 클릭해 롬복 플러그인을 사용할 IDE인 STS가 설치된 경로를 선택한다(이미 올바른 경로가 선택되어 있다면 이 과정은 생략해도 된다.). 그다음 [Install / Update]를 클릭해 롬복 플러그인을 설치한다.

4) 다음과 같이 설치가 성공적으로 완료되었음을 알리는 문구가 뜬다면 [Quit Installer]를 클릭해 설치 프로그램을 종료한다.

5) 만약 STS가 활성화되어 있다면 종료하고 다시 시작한 후 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 파일을 수정한 후에는 반드시 build.gradle 파일을 선택해 마우스 오른쪽 버튼을 눌러 [Gradle → Refresh Gradle Project]를 클릭해 라이브러리를 설치해야 한다.
롬복(Lombok)으로 Getter, Setter 메서드 만들기
com.mysite.sbb에 마우스 오른쪽 버튼을 누르고 New → Class를 클릭해 HelloLombok 클래스를 만들어 보자. 그리고 다음과 같이 소스 코드를 작성하여 롬복이 정상적으로 동작하는지 확인해 보자. 다음 코드를 작성했을 때 오류가 없어야 한다.
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());
}
}
오류가 발생한다면 Gradle → Refresh Gradle Project를 다시 클릭하고 콘솔 창을 통해 라이브러리가 제대로 설치됐는지 확인해 보자.
HelloLombok 클래스에 ‘hello’, ‘lombok’ 이렇게 2개의 속성을 추가한 후 클래스명 바로 위에 @Getter, @Setter라는 애너테이션을 적용했더니 Getter와 Setter 메서드를 따로 작성하지 않아도 setHello, setLombok, getHello, getLombok 등의 메서드를 사용할 수 있게 되었다. 즉, 롬복을 활용하면 속성에 대한 Setter, Getter 메서드를 별도로 작성하지 않아도 된다.
소스 코드에는 Getter, Setter 메서드가 눈으로 보이지 않지만 컴파일 단계에서 롬복이 대신 생성해 주므로 컴파일된 클래스에는 Getter와 Setter 메서드가 실제로 포함된다.
다음과 같이 Getter, Setter 메서드를 직접 작성한 코드와 비교하며 롬복의 편리함을 느껴 보자. 16줄로 완성했던 코드가 24줄로 표현된다.
package com.mysite.sbb;
public class HelloLombok {
private String hello;
private int lombok;
public void setHello(String hello) {
this.hello = hello;
}
public void setLombok(int lombok) {
this.lombok = lombok;
}
public String getHello() {
return this.hello;
}
public int getLombok() {
return this.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 클래스를 다음과 같이 수정해 보자.
package com.mysite.sbb;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Getter
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 애너테이션을 적용하면 해당 속성(hello와 lombok)을 필요로 하는 생성자가 롬복에 의해 자동으로 생성된다. 즉, 롬복을 활용하면 필요한 생성자를 자동으로 만들어 준다.
- final은 뒤에 따라오는 자료형과 변수 등을 변경할 수 없게 만드는 키워드이다. 만약 클래스 속성을 정의한 코드에 final이 없다면 생성자에 포함되지 않는다. 또한 final을 적용하면 속성값을 변경할 수 없기 때문에 @Setter는 의미가 없어지고, Setter 메서드 또한 사용할수 없다.
- @RequiredArgsConstructor 애너테이션은 2장부터 본격적으로 만들어 볼 SBB 프로그램에서 자주 사용하니 꼭 기억해 두자
다음과 같이 생성자를 직접 작성한 코드와 비교하며 롬복의 편리함을 느껴 보자.
Copypackage 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());
}
}