개발자의 boilerplate code를 줄이고 가독성을 높일 수 있도록 지원하는 java 라이브러리
✏️ Boilerplate Code
반복적이고 본질적인 로직과 무관하지만 반드시 작성해야 하는 코드
Java에서는 객체의 필드를 다룰 때 getter, setter, 메서드 등이 대표적이다.
| 어노테이션 | 사용 위치 | 역할 |
|---|---|---|
@Getter | 클래스 | 모든 필드에 대해 getter 메서드 자동 생성 |
@Setter | 클래스 | 모든 필드에 대해 setter 메서드 자동 생성 |
@ToString | 클래스 | toString() 메서드 자동 생성 |
@EqualsAndHashCode | 클래스 | equals()와 hashCode() 메서드 자동 생성 |
@NoArgsConstructor | 클래스 | 기본 생성자 (파라미터 없는 생성자) 자동 생성 |
@AllArgsConstructor | 클래스 | 모든 필드를 파라미터로 받는 생성자 자동 생성 |
@RequiredArgsConstructor | 클래스 | final, @NonNull 필드만을 파라미터로 받는 생성자 자동 생성 |
@Data | 클래스 | @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 한 번에 적용 |
@Builder | 클래스, 생성자, 메서드 | 빌더 패턴 자동 생성 (객체 생성 유연화) |
@Value | 클래스 | 모든 필드를 final로 하여 불변 객체 생성, getter, toString, equals, hashCode 생성, setter 미생성 |
@Slf4j | 클래스 | 로그 변수 (log) 자동 생성 ( private static final org.slf4j.Logger log필드 생성) |
// Lombok 적용 전
public class User {
private Long id;
private String name;
// 기본 생성자
public User() {}
// 모든 필드 초기화 생성자
public User(Long id, String name) {
this.id = id;
this.name = name;
}
// Getter & Setter
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
// toString() : 객체 정보를 문자열로 반환
@Override
public String toString() {
return "User{id=" + id + ", name='" + name + "'}";
}
// equals() : 두 객체가 같은지 비교 (주로 id와 name이 모두 같을 때)
// hashCode() : 객체를 해시 기반 컬렉션(Map, Set)에 넣을 때 사용
}
// Lombok 적용 후
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
}