Lombok은 자바에서 반복적으로 작성되는 코드, 특히 getter, setter, toString과 같은 메서드 생성 코드를 자동으로 작성해 주는 강력한 라이브러리입니다. 이 섹션에서는 Lombok의 대표적인 애너테이션인 @Getter, @Setter, @ToString, @EqualsAndHashCode, @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor에 대해 설명하고, 자바 코드 예제를 통해 각각의 사용법을 알아보겠습니다.
@Getter와 @Setter: 자동으로 게터와 세터 생성
@Getter와 @Setter 애너테이션은 클래스의 필드에 대한 getter와 setter 메서드를 자동 생성해 줍니다. 이 애너테이션을 사용하면 필드별로 메서드를 작성할 필요 없이 쉽게 접근자 메서드를 생성할 수 있어 코드의 간결성과 유지보수성이 높아집니다.
예제 코드
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String username;
private int age;
}
public class Main {
public static void main(String[] args) {
User user = new User();
user.setUsername("Alice");
user.setAge(25);
System.out.println("Username: " + user.getUsername());
System.out.println("Age: " + user.getAge());
}
}
이 코드를 실행하면 username과 age 필드에 대한 getter와 setter 메서드가 자동으로 생성되어 접근할 수 있습니다. 이로써 코드에서 반복적인 작업을 줄이고 가독성을 높일 수 있습니다.
@ToString, @EqualsAndHashCode: 객체 설명 및 비교 메서드 생성
@ToString 애너테이션은 객체의 필드 값을 문자열 형태로 출력할 수 있도록 toString() 메서드를 자동으로 생성해 줍니다. 이 메서드는 객체의 정보를 명확히 표현하는 데 유용합니다. 반면, @EqualsAndHashCode는 객체 간 동등성 및 해시코드 비교 메서드를 생성하여 컬렉션 사용 시 객체 비교의 편리함을 제공합니다.
예제 코드
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.EqualsAndHashCode;
@Getter
@Setter
@ToString
@EqualsAndHashCode
public class Product {
private String name;
private double price;
}
public class Main {
public static void main(String[] args) {
Product product1 = new Product();
product1.setName("Laptop");
product1.setPrice(1500.0);
Product product2 = new Product();
product2.setName("Laptop");
product2.setPrice(1500.0);
System.out.println("Product1: " + product1.toString());
System.out.println("Product1 equals Product2: " + product1.equals(product2));
}
}
위 코드에서 @ToString은 Product 객체를 설명하는 문자열을 출력하고, @EqualsAndHashCode는 product1과 product2 객체가 같은 값인지 비교할 수 있게 합니다. equals()와 hashCode() 메서드를 자동으로 생성하여 객체 비교 시 코드의 반복을 줄입니다.
@NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor: 다양한 생성자 자동 생성
생성자는 객체를 초기화하는 중요한 역할을 합니다. @NoArgsConstructor는 파라미터가 없는 기본 생성자를, @AllArgsConstructor는 모든 필드를 초기화하는 생성자를, @RequiredArgsConstructor는 필수 필드(final 필드 또는 @NonNull 필드)를 초기화하는 생성자를 자동으로 생성해 줍니다.
1. @NoArgsConstructor
파라미터가 없는 기본 생성자를 생성합니다. 빈 생성자가 필요한 경우에 유용합니다.
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Employee {
private String name;
private int id;
}
2. @AllArgsConstructor
모든 필드를 매개변수로 받는 전체 생성자를 생성합니다.
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Employee {
private String name;
private int id;
}
3. @RequiredArgsConstructor
필수 필드만을 초기화하는 생성자를 생성합니다. 주로 final 필드 또는 @NonNull이 설정된 필드를 필요로 하는 경우 사용됩니다.
import lombok.RequiredArgsConstructor;
import lombok.NonNull;
@RequiredArgsConstructor
public class Employee {
@NonNull
private String name;
private int id;
}
Lombok 생성자 애너테이션을 사용하는 예제
모든 생성자 애너테이션을 조합하여 Employee 클래스를 생성해 보겠습니다.
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.ToString;
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class Employee {
@NonNull
private String name;
private int id;
}
public class Main {
public static void main(String[] args) {
Employee emp1 = new Employee();
Employee emp2 = new Employee("Alice");
Employee emp3 = new Employee("Alice", 101);
System.out.println(emp1.toString());
System.out.println(emp2.toString());
System.out.println(emp3.toString());
}
}
위 코드에서는 Lombok의 생성자 애너테이션이 결합되어 다양한 생성자를 생성할 수 있습니다. emp1 객체는 기본 생성자로 생성되고, emp2는 필수 필드(name)만 초기화하며, emp3는 모든 필드(name, id)를 초기화합니다. 이처럼 생성자 애너테이션을 조합하면 코드의 유연성이 높아지고 개발 속도가 향상됩니다.
참고사이트
- Lombok 공식 사이트: https://projectlombok.org
- Baeldung의 Lombok 애너테이션 가이드: https://www.baeldung.com/intro-to-project-lombok
'JAVA' 카테고리의 다른 글
[JAVA] Lombok 애너테이션, 어노테이션 (@Value, @Singular, @SuperBuilder) (0) | 2024.10.31 |
---|---|
[JAVA] Lombok Lazy Getter(lazy=true)와 Setter (0) | 2024.10.31 |
[JAVA] Lombok @Data 애너테이션(어노테이션 Annotation) (1) | 2024.10.30 |
[JAVA] Lombok Builder 패턴과 활용 (1) | 2024.10.30 |
[JAVA] Lombok 환경 설정 (1) | 2024.10.30 |
[JAVA] Lombok 이란? (0) | 2024.10.30 |
[JAVA] JSoup 활용 (자주사용하는 메서드) (0) | 2024.10.29 |
[JAVA] JSoup 구글 뉴스 크롤링 예제 (3) | 2024.10.29 |