이번 포스팅에서는 Lombok 라이브러리가 제공하는 어노테이션들을 예제 코드와 함께 자세히 알아보겠습니다.
객체를 생성하는 방법은 여러 가지가 있으며, Lombok은 각 상황에 맞는 생성자를 자동으로 만들어줍니다.
@NoArgsConstructor (기본 생성자)인자가 없는 기본 생성자를 만듭니다.
사용 목적:
예제:
@NoArgsConstructor
public class Book {
private String title;
private String author;
}
// Lombok이 생성하는 코드:
// public Book() {}
@AllArgsConstructor (모든 필드 생성자)클래스의 모든 필드를 인자로 받는 생성자를 만듭니다.
@AllArgsConstructor
public class Book {
private String title;
private String author;
}
// Lombok이 생성하는 코드:
// public Book(String title, String author) {
// this.title = title;
// this.author = author;
// }
@RequiredArgsConstructor (필수 필드 생성자)final로 선언되었거나 @NonNull 어노테이션이 붙은 필수 필드만을 인자로 받는 생성자를 만듭니다.
사용 목적:
final 필드를 사용해 불변 객체를 생성할 때 매우 유용합니다.예제:
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
@NonNull
private String version;
}
// Lombok이 생성하는 코드:
// public UserService(UserRepository userRepository, String version) {
// this.userRepository = userRepository;
// this.version = version;
// }
@Builder (빌더 패턴)가장 강력하고 유연한 생성 방식으로, 빌더 패턴을 자동으로 구현해 줍니다.
사용 목적:
@AllArgsConstructor보다 훨씬 명확하고 안전합니다.예제:
@Builder
public class UserProfile {
private String name;
private int age;
private String email;
private boolean isPublic;
}
// 사용 방법:
UserProfile profile = UserProfile.builder()
.name("Alice")
.age(30)
.isPublic(true) // 이메일은 선택적으로 생략 가능
.build();
매일 반복해서 작성하는 Getter, Setter, toString() 같은 메서드들도 Lombok을 사용하면 한 줄로 해결할 수 있습니다.
@Getter & @Setter필드에 대한 Getter와 Setter 메서드를 자동으로 생성해줍니다.
사용 목적:
@Getter: 객체의 데이터를 읽어와야 할 때 주로 사용합니다.@Setter: 외부에서 필드의 값을 변경해야 할 때 사용합니다. 불변 객체를 만들 때는 @Setter를 사용하지 않는 것이 좋습니다.예제:
public class Product {
@Getter @Setter private String name;
@Getter private int price; // price는 변경 불가능하게 설정
}
// Lombok이 생성하는 코드:
// public String getName() { return name; }
// public void setName(String name) { this.name = name; }
// public int getPrice() { return price; }
@ToString객체의 필드 값들을 포함하는 toString() 메서드를 자동으로 만들어줍니다.
사용 목적:
예제:
@ToString(exclude = "password") // password 필드는 제외
public class User {
private String username;
private String password;
private String email;
}
// User 객체 출력 시:
// User(username=johndoe, email=john@example.com)
@EqualsAndHashCodeequals()와 hashCode() 메서드를 자동으로 오버라이딩합니다.
HashSet이나 HashMap 같은 컬렉션에 객체를 저장할 때, hashCode()를 이용해 성능을 높일 수 있습니다.@EqualsAndHashCode
public class Point {
private int x;
private int y;
}
// 두 Point 객체 비교
Point p1 = new Point(1, 2);
Point p2 = new Point(1, 2);
p1.equals(p2); // true
@Data (최강의 종합 어노테이션)@Data는 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 모두 포함하는 종합 선물 세트입니다.
사용 목적:
주의점: 엔티티 클래스에서는 데이터베이스 테이블의 컬럼을 직접 변경하는 @Setter를 함부로 사용하는 것을 지양해야 합니다.
예제:
@Data
public class PostDto {
private String title;
private String content;
}
이러한 Lombok 어노테이션들은 개발자가 비즈니스 로직에 더 집중할 수 있게 도와줍니다. 코드를 간결하게 만들고 유지보수를 쉽게 하는 어노테이션을 잘 활용하여 생산성을 높여 보세요!