# Table of Contents
# Lombok
Lombok
을 사용하면 코드에서 반복적으로 정의해야하는 Getter
, Setter
, Constructor
등의 메소드를 어노테이션으로 쉽게 추가할 수 있다.
# 설치
Lombok
을 사용하려면 다음과 같은 의존성을 추가해야한다.
dependencies {
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
# @Getter
@Getter
는 멤버변수에 대한 Getter를 추가해준다. 다음 클래스를 살펴보자.
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
}
@Getter
를 클래스에 붙이면 클래스의 모든 멤버변수에 대한 Getter가 추가된다.
@Getter
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
}
@Getter
를 멤버변수에 붙이면 해당 멤버변수에 대한 Getter만 생성된다.
public class Person {
@Getter
private String name;
@Getter
private int age;
@Getter
private boolean isMarried;
private double money; // 멤버변수 money에 대한 Getter는 생성되지 않는다.
}
# @Setter
@Setter
는 멤버변수에 대한 Setter를 추가해준다. 다음 클래스를 살펴보자.
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
}
@Setter
를 클래스에 붙이면 클래스의 모든 멤버변수에 대한 Setter가 추가된다.
@Setter
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
}
@Getter
를 멤버변수에 붙이면 해당 멤버변수에 대한 Getter만 생성된다.
public class Person {
@Setter
private String name;
@Setter
private int age;
@Setter
private boolean isMarried;
private double money; // 멤버변수 money에 대한 Getter는 생성되지 않는다.
}
# @AllArgsConstructor
@AllArgsConstructor
는 모든 멤버 변수를 사용하는 생성자를 생성한다.
@AllArgsConstructor
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
/* 아래 생성자가 자동으로 생성된다.
public Person(String name, int age, boolean isMarried, double money) {
this.name = name;
this.age = age;
this.isMarried = isMarried;
this.money = money;
}
*/
}
# @NoArgsConstructor
매개변수가 없는 기본 생성자를 생성한다.
@AllArgsConstructor
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
/* 아래 생성자가 자동으로 생성된다.
public Person() {
}
*/
}
# @RequiredConstructor
@RequiredConstructor
는 @NonNull
이 붙은 멤버변수만을 인자로 받는 생성자를 생성한다.
@RequiredArgsConstructor
public class Person {
@NonNull private String name;
@NonNull private int age;
private boolean isMarried;
private double money;
}
Person p = new Person("Paul", 34);
또한 @RequiredConstructor
는 보통 Spring Framework
에서 의존성을 주입할 때 사용한다. 이 어노테이션을 붙이면 초기화되지 않는 final
멤버변수에 의존성을 주입해준다.
@Service
@RequiredArgsConstructor
public class AuthService {
private final PasswordEncoder passwordEncoder;
private final UserRepository userRepository;
// ...
}
# @Builder
@Builder
는 빌더 패턴으로 객체를 생성할 수 있도록 도와준다. 클래스에 어노테이션을 추가하면 모든 멤버변수에 대한 메소드를 추가해준다.
@Builder
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
}
Person p = Person.builder()
.name("Paul")
.age(34)
.isMarried(true)
.money(40000.0)
특정 변수에 대한 메소드만 추가학 싶다면 생성자를 작성하고 생성자에 어노테이션을 추가한다.
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
@Builder
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
# @ToString
@ToString
을 사용하면 멤버변수를 기반으로 toString()
메소드를 자동으로 생성해준다.
@ToString
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
}
@ToString.Exclude
가 붙은 멤버변수는 toString()
의 출력에서 제외된다.
@ToString
public class Person {
private String name;
private int age;
private boolean isMarried;
@ToString.Exclude
private double money;
}
# @EqualsAndHashCode
equals()
와 hashCode()
를 만들어준다.
@EqualsAndHashCode
public class Person {
private String name;
private int age;
private boolean isMarried;
private double money;
}
# @Data
@Getter
, @Setter
, @RequiredArgsConstructor
, @ToString
, @EqualsAndHashCode
를 자동으로 생성해준다. @Data
를 사용하면 객체가 무거워지고 불변성을 보장하기 때문에 사용을 지양한다.