[프로그래밍] Java

[Java] Lombok annotation

JHVan 2024. 11. 3. 10:38

Lombok의 주요 어노테이션 기능 :

  • @Getter, @Setter: 필드에 getter/setter 자동 생성.
  • @ToString: 객체의 toString 메서드 생성.
  • @NoArgsConstructor: 파라미터 없는 생성자 생성.
  • @AllArgsConstructor: 모든 필드 포함하는 생성자 생성.
  • @RequiredArgsConstructor: final 필드나 @NonNull 필드 포함한 생성자 생성.
  • @Data: @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 통합.
  • @EqualsAndHashCode: equals, hashCode 메서드 생성.
  • @Builder: 빌더 패턴 메서드 제공.
  • @Value: 불변 클래스 생성.
  • @NonNull: 필드가 null이 아님을 보장.
  • @Slf4j: 로그 객체 생성.
  • @Cleanup: 자원 자동 반환

대표 사용 예시:

@Getter, @Setter

필드에 getter와 setter 메서드를 자동으로 추가함

public class User {
    @Getter @Setter
    private String name;
    @Getter @Setter
    private int age;
}
// name과 age에 대한 getter/setter 메서드가 자동으로 추가됨

 

추가되는 코드 (생략된 코드)

public String getName() { return name; }
public void setName(String name) { this.name = name; }

public int getAge() { return age; }
public void setAge(int age) { this.age = age; }

 

@ToString

객체의 필드를 기반으로 toString 메서드를 자동 생성함

import lombok.ToString;

@ToString
public class Person {
    private String name;
    private int age;
}

 

추가되는 코드 (생략된 코드)

public String toString() { return "Person(name=" + name + ", age=" + age + ")"; }

 

@AllArgsConstructor

모든 필드를 포함하는 생성자를 자동 생성함

import lombok.AllArgsConstructor;

@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}

 

추가되는 코드 (생략된 코드)

public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

 

@NoArgsConstructor

파라미터가 없는 기본 생성자를 자동 생성함

import lombok.NoArgsConstructor;

@NoArgsConstructor
public class Person {
    private String name;
    private int age;
}

 

추가되는 코드 (생략된 코드)

public Person() { }

 

@RequiredArgsConstructor

final 필드나 @NonNull이 붙은 필드를 포함하는 생성자를 자동 생성함

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class Person {
    private final String name;
    private int age;
}

 

추가되는 코드 (생략된 코드)

public Person(String name) {
    this.name = name;
}

 

@Data

@Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 통합하여 자동 생성함

import lombok.Data;

@Data
public class Person {
    private final String name;
    private int age;
}

추가되는 코드 (생략된 코드)

// 모든 필드에 getter와 setter
public String getName() { return name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }

// toString 메서드
public String toString() { return "Person(name=" + name + ", age=" + age + ")"; }

// equals와 hashCode
public boolean equals(Object o) { /* equals 메서드 */ }
public int hashCode() { /* hashCode 메서드 */ }

// final 필드를 포함하는 생성자
public Person(String name) { this.name = name; }

 

@EqualsAndHashCode

equals와 hashCode 메서드를 필드 기반으로 자동 생성함

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Person {
    private String name;
    private int age;
}

 

추가되는 코드 (생략된 코드)

public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return age == person.age && Objects.equals(name, person.name);
}

public int hashCode() { return Objects.hash(name, age); }

 

@Value

불변 객체를 만들 때 사용하며, 필드가 final이 되고 getter가 자동으로 생성됨

 

import lombok.Value;

@Value
public class Person {
    private String name;
    private int age;
}

 

추가되는 코드 (생략된 코드)

// 모든 필드는 final, setter 없음
public String getName() { return name; }
public int getAge() { return age; }

// 기본 생성자와 필드 포함한 생성자 추가
public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

 

@NonNull

필드가 null이 될 수 없음을 보장하며, null 값이 들어오면 예외 발생함

import lombok.NonNull;

public class Person {
    private @NonNull String name;
}

 

추가되는 코드 (생략된 코드)

public void setName(@NonNull String name) {
    if (name == null) {
        throw new NullPointerException("name is marked non-null but is null");
    }
    this.name = name;
}

@Slf4j

로그 객체를 자동으로 추가해 log.info(), log.error() 등을 편리하게 사용할 수 있음

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class PersonService {
    public void process() {
        log.info("Processing person");
    }
}

 

@Cleanup

자원을 자동 반환함, try-with-resources 구문을 대체함

 

import lombok.Cleanup;

public void readFile() throws IOException {
    @Cleanup BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
    String line = reader.readLine();
}

 

추가되는 코드 (생략된 코드)

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
try {
    String line = reader.readLine();
} finally {
    reader.close();
}

'[프로그래밍] Java' 카테고리의 다른 글

[프로젝트] 구현 전 문서작성  (0) 2024.11.07
[Java]Java 의 Type  (0) 2024.04.08
[Java]Java ? ja, va!  (0) 2024.03.27