Lombok 이란?
- Java 프로젝트에서 보일러플레이트(boilerplate) 코드
즉, 반복적으로 작성해야하는 코드를 줄이기 위해 사용되는 라이브러리이다. - 코드의 가독성을 높이고 생산성이 향상된다.
주요 기능
1. Getter / Setter 자동 생성
- @Getter / @Setter를 사용하지 않는다면,
public class User {
private String name;
private int age;
// Getter for name
public String getName() {
return name;
}
// Setter for name
public void setName(String name) {
this.name = name;
}
// Getter for age
public int getAge() {
return age;
}
// Setter for age
public void setAge(int age) {
this.age = age;
}
}
- 클래스의 필드에 대해 getter / setter 메서드를 자동으로 생성
- 어노테이션 : @Getter, @Setter
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
}
2. 생성자 자동 생성
- @NoArgsConstructor, @AllArgsContructor, @RequiredArgsConstructor을 사용하지 않는다면,
public class User {
// 필드 정의
private String name;
private int age;
// 기본 생성자 (No-Args Constructor)
public User() {
}
// 모든 필드를 초기화하는 생성자 (All-Args Constructor)
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Service {
private final String serviceName;
private final int serviceId;
private String description; // final이 아님
// RequiredArgsConstructor에 해당하는 생성자
public Service(String serviceName, int serviceId) {
this.serviceName = serviceName;
this.serviceId = serviceId;
}
}
- 다양한 생성자를 자동으로 생성
- 어노테이션 : @NoArgsConstructor, @AllArgsContructor, @RequiredArgsConstructor
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private int age;
}
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Service {
private final String serviceName;
private final int serviceId;
private String description; // final이 아님, 생성자에 포함되지 않음
}
3. toString() 메서드 자동 생성
- @ToString을 사용하지 않는다면,
public class User {
private String name;
private int age;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- 객체의 문자열 표현을 자동 생성
- 어노테이션 : @ToString
import lombok.ToString;
@ToString
public class User {
private String name;
private int age;
}
4. hashCode() 와 equals() 자동 생성
- @EqualsAndHashCode을 사용하지 않는다면,
public class Person {
private String name;
private int age;
// hashCode() implementation
@Override
public int hashCode() {
int result = 17; // Initial non-zero prime
result = 31 * result + (name == null ? 0 : name.hashCode());
result = 31 * result + age;
return result;
}
// equals() implementation
@Override
public boolean equals(Object obj) {
if (this == obj) return true; // Check reference equality
if (obj == null || getClass() != obj.getClass()) return false; // Check null or type
Person other = (Person) obj; // Safe cast
if (age != other.age) return false; // Check primitive field
return (name != null ? name.equals(other.name) : other.name == null); // Check object field
}
}
- 객체 비교에 필요한 메서드를 자동 생성
- 어노테이션 : @EqualsAndHashCode
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
private String name;
private int age;
}
5. 빌더 패턴 생성
- 객체 생성 시 빌더 패턴을 쉽게 사용할 수 있도록 지원합니다.
- @Builder를 사용하지 않는다면,
public class User {
private String name;
private int age;
private User(Builder builder) {
this.name = builder.name;
this.age = builder.age;
}
public static class Builder {
private String name;
private int age;
public Builder name(String name) {
this.name = name;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public User build() {
return new User(this);
}
}
public static Builder builder() {
return new Builder();
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
// 빌더 패턴 사용 예제
User user = User.builder()
.name("John")
.age(30)
.build();
- 어노테이션 : @Builder
import lombok.Builder;
@Builder
public class User {
private String name;
private int age;
}
User user = User.builder()
.name("John")
.age(30)
.build();
6. 로그 로깅 지원
- 다양한 로깅 라이브러리에 대해 자동으로 로그 객체를 생성
- @Slf4j, @Log, @Log4j2
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class User {
public void logExample() {
log.info("Logging with Lombok");
}
}
Lombok 장점
- 코드 간소화
- 보일러플레이트 코드를 줄여 코드 가독성과 유지보수성을 높임
- 생산성 향상
- 코드 작성 시간을 줄이고 주요 비즈니스 로직에 집중
- 가독성 향상
- 필요 없는 코드를 제거하여 클래스의 핵심 내용만 확인
Lombok 단점
- 코드 디버깅 어려움
- Lombok이 생성한 메서드나 필드는 코드에 직접 표시되지 않아
디버깅이 어려움
- Lombok이 생성한 메서드나 필드는 코드에 직접 표시되지 않아
- 의존성 추가 필요
- Lombok을 사용하려면 프로젝트에 Lombok 의존성을 추가해야 함
- IDE 설정 필요
- 일부 IDE에서는 Lombok 플러그인을 설치해야 제대로 동작
- eclipse
- Intellij
- 일부 IDE에서는 Lombok 플러그인을 설치해야 제대로 동작
'Spring Framework' 카테고리의 다른 글
[Spring] JPA vs MyBatis (0) | 2024.12.03 |
---|---|
[Spring] Dispatcher Servlet (2) | 2024.11.22 |
[Spring] Maven vs Gradle (3) | 2024.11.19 |
[Spring] 정적 팩토리 메서드 (Static Factory Method) (2) | 2024.11.14 |