JAVA

[JAVA] Lombok 어노테이션, 애너테이션(Annotation)의 기본 사용법

인생아 2024. 10. 30. 13:29
반응형

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());
    }
}

이 코드를 실행하면 usernameage 필드에 대한 gettersetter 메서드가 자동으로 생성되어 접근할 수 있습니다. 이로써 코드에서 반복적인 작업을 줄이고 가독성을 높일 수 있습니다.

@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는 product1product2 객체가 같은 값인지 비교할 수 있게 합니다. 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)를 초기화합니다. 이처럼 생성자 애너테이션을 조합하면 코드의 유연성이 높아지고 개발 속도가 향상됩니다.

참고사이트

반응형