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 |