2월 21, 2024

[Java] Lombok 의존성 추가, 유명 Annotation (@Getter @Setter @ToString, 생성자, @Data)

1. Lombok이란? 

Lombok은 Java 언어를 위한 프로덕션 라이브러리로, 반복적이고 지루한 작업을 줄이고 코드를 더 간결하게 작성할 수 있도록 돕는 도구라고 할 수 있다. Lombok의 주요 기능은 자동 생성자, Getter 및 Setter 메서드, equals 및 hashCode 메서드, toString 메서드 등을 자동으로 생성하여 개발자의 작업을 간소화하고 코드를 간소화한다. 
 
 

2. Lombok을 활용하기 위한 Dependencies 추가

 
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
 
build.gradle 파일에서 dependencies 부분에 위 코드를 추가해주면 된다.
위 코드에서 compileOnly 란 컴파일 시에만 Lombok 라이브러리가 필요하고, 런타임에는 필요하지 않음을 나타낸다. 두 번째 코드인 annotationProcessor 구성은 컴파일 시에 Lombok이 처리되도록 하는 것이다.
 
 

3. 자주 사용되는 Lombok annotation

 

1) @Getter, @Setter

 
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Person {
private String name;
private int age;
}
 
 
Lombok의 @Getter와 @Setter가 없이는 Java 코드로 항상
setName(), getName(), setAge(), getAge() 등 각 field 마다 getter와 setter를 코드에 명시해주어야 했다.
특정 필드에 @Getter와 @Setter의 annotation을 붙여주면 해당 필드에 대한 getter와 setter 메소드를 명시하지 않아도 Getter와 Setter 기능을 사용할 수 있다.
 
 
또한 클래스 자체에 @Getter와 @Setter를 붙이면 해당 클래스의 모든 필드에 대한 Getter와 Setter 기능을 사용할 수 있다. 모든 필드에 대해 Getter와 Setter 코드를 다 작성하던 기존의 코드에 비하여 코드 길이를 상당히 단축시킬 수 있다.
 
 

2) 생성자 자동 생성

 
Java에서 해당 class를 만들기 위해서는 반드시 생성자가 있어야 하는데 Lombok을 사용하면 이러한 생성자도 단 하나의 annotation을 사용하여 생성할 수 있어 매우 편리하다.
생성자를 자동으로 생성해주는 annotation에는 세 가지 종류가 있다. 
-@NoArgsConstructor: 매개변수가 없는 기본 생성자를 생성해줌.
-@RequiredArgsConstructor: 필드가 final 또는 @NonNull로 표시된 경우 해당 필드를 매개변수로 하는 생성자를 생성해줌.
-@AllArgsConstructor: 모든 필드를 매개변수로 하는 생성자를 생성해줌.
 
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.AllArgsConstructor;
 
 
@NoArgsConstructor  // 매개변수가 없는 기본 생성자를 생성
@RequiredArgsConstructor  // 필수 필드를 매개변수로 하는 생성자를 생성
@AllArgsConstructor  // 모든 필드를 매개변수로 하는 생성자를 생성
public class Example {
private final String field1; 
private boolean field2;
private String field3;
 
}
 
 
위 코드에서 private final String으로 되어 있는 field1은 @RequiredArgsConstructor에 의해 필수 field로 여겨진다.
 

3) @ToString

 
 
Lombok의 @ToString annotation은 클래스의 toString() 메서드를 자동으로 생성해준다.
 
 
예를 들어
import lombok.ToString;
@ToString
public class Person {
private String name;
private int age;
}
 
위와 같이 Lombok @ToString annotation을 사용한 Java code가 있다고 가정해보면 Lombok의 @ToString은 아래와 같은 method를 자동으로 생성해준다.
 
@Override
public String toString() {
return "Person(name=" + this.name + ", age=" + this.age + ")";
}
이렇게 생성된 toString() 메서드는 클래스의 모든 필드를 포함하며, 필드 이름과 해당 필드의 값이 포함된 문자열을 반환해준다.
 
 
하지만 만약 여기서 특정 필드만을 제외하고 싶다면 어떻게 하면 될까? Lombok의 exclude 옵션을 줄 수 있다.
(exclude = "name")
이런 식으로 특정 필드를 제외하여 toString() 메소드를 생성할 수 있다.
 
 

4) @EqualsAndHashCode annotation

 
클래스의 equals()와 hashCode() 메서드를 자동으로 생성해주는 Lombok의 기능이다.
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Person {
private String name;
private int age;
}
위와 같이 name와 age라는 필드에 대해 @EqualsAndHashCode annotation을 사용함으로써 equals()와 hashCode() 메서드를 생성해줄 수 있다.
 
 
마찬가지로 exclude 옵션을 사용하여 제외하고 싶은 필드를 제외시킬 수 있다.
@EqualsAndHashCode(exclude = "name")
public class Person {
private String name;
private int age;
}
name field를 제외하고 싶다면 위와 같은 코드로 사용할 수 있다.
 
 

5) @Data

 
위에서 다른 4개의 annotation 모두 우리가 Java에서 코드를 작성할 때 매우 유용하고 자주 사용되는 annotation들이다. 따라서 4개의 annotation을 모두 다 직접 나열할 필요 없이 하나의 annotation으로 @Data 라는 annotation을 만들었다.
하나의 annotation만 사용하면 다섯개의 다른 annotation들(@Getter, @Setter, @EqualsAndHashCode, @ToString, @RequiredArgsConstructor)을 나열할 필요가 없이 위 기능들을 모두 사용할 수 있어서 매우 편리한 기능이다.