

@AllArgsConstructor는 클래스에 정의된 모든 필드를 매개변수로 받는 생성자를 자동으로 생성하며 생성자 접근 제어자도 설정 가능
@AllArgsConstructor
class Person {
private String name;
private int age;
}
이렇게 하면 Person 클래스에 name과 age를 받는 생성자가 자동으로 생성
Person person = new Person("Seonga", 24);
Lombok의 @Getter와 @Setter는 각각 클래스의 모든 필드에 대해 get()과 set() 메서드 자동으로 생성
@AllArgsConstructor
class Person {
@Getter @Setter private String name;
@Getter @Setter private int age;
}
toString() 메서드 생성@ToString 어노테이션은 객체의 toString() 메서드를 자동으로 생성하며 필요한 필드를 포함 또는 제외 가능
@ToString
class Person {
private String name;
private int age;
}
Person(name=Seonga, age=24)
필드를 제외하고 싶으면 exclude 옵션을 사용하고, 포함하고 싶은 필드는 of 옵션으로 지정
@ToString(exclude = {"age"})
class Person {
private String name;
private int age;
}
@RequiredArgsConstructor는 final 필드나 @NonNull이 있는 필드만을 받는 생성자 자동으로 생성
@RequiredArgsConstructor
class Person {
private final String name;
private int age;
}
이 코드는 name을 매개변수로 받는 생성자를 생성합니다. age는 나중에 @Setter를 통해 설정 가능
@NoArgsConstructor는 인자가 없는 기본 생성자 생성
@NoArgsConstructor
class Person {
private String name;
private int age;
}
이렇게 하면 Person 객체를 생성할 때 인자 없이 생성 가능
Person person = new Person();
equals 및 hashCode) 생성@EqualsAndHashCode는 equals와 hashCode 메서드를 자동으로 생성하며 필요에 따라 비교할 필드를 선택 또는 제외 가능
@EqualsAndHashCode
class Member {
private int id;
private String name;
private String email;
}
이렇게 하면 Member 객체는 id, name, email을 기준으로 equals와 hashCode 메서드 생성
세부 설정:
@EqualsAndHashCode(of = {"id", "name"}) : id와 name만으로 동등성 비교@EqualsAndHashCode(exclude = {"email"}) : email 필드는 비교에서 제외@FieldDefaults는 클래스의 모든 필드에 대해 기본 접근 제어자를 설정 가능
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
class Person {
String name;
int age;
}
이렇게 하면 name과 age 필드는 private final로 설정
@Builder는 빌더 패턴을 사용하여 객체를 생성하며 필드값을 순차적으로 설정한 후 build() 메서드를 호출하여 객체 생성
@Builder
class Player {
private String name;
private int age;
private String address;
private int winCount = 0;
private int failCount = 0;
}
빌더 패턴을 사용한 객체 생성
Player player = Player.builder()
.name("Seonga")
.age(24)
.address("Seoul")
.winCount(10)
.failCount(10)
.build();
빌더는 필드 설정 순서에 구애받지 않으며, 조건부 설정이나 validation도 가능
@Slf4j는 클래스에 SLF4J 로깅 기능을 추가하며 log 객체를 자동으로 생성
Slf4j = Simple Logging Facade for Java
- Logback, Log4j 와 같은 Logging Framework 들에 대한 Facade(추상체) 제공
- Logging Framework 변경에도 아무런 문제없이 로깅 수행
@Slf4j
class Person {
private String name;
private int age;
public void greet() {
log.info("Hello, my name is {}", name);
}
}
이렇게 하면 log 객체를 통해 쉽게 로깅 가능
다만,
log.info,.warn,.error어떤 메서드든 상관없이
꼭 두번째 파라미터는 Throwable 로 전달해야 stack trace가 자동으로 기록
logger.error("User : {}", user, ex);
Lombok을 활용하여 객체를 생성하는 3가지 방법
@NoArgsConstructor@RequiredArgsConstructor@AllArgsConstructor@Builder를 사용하면 객체 생성 시 필드값을 설정하고 build()를 통해 객체 생성
정적 팩토리 메서드를 사용하여 객체를 생성하는 방법으로 객체 생성 방식에 제약을 두거나 유연성 증대
@AllArgsConstructor(access = AccessLevel.PRIVATE)
class Person {
private int id;
private String name;
public static Person of(MakePersonDto dto) {
return new Person(dto.getId(), dto.getName());
}
}
Person.of(dto)와 같은 방식으로 객체 생성 가능
DTO는 주로 데이터를 전송하기 위해 사용되는 객체
DTO를 정의할 때는 데이터를 불러오거나 설정할 수 있어야 하므로 @Getter, @Setter, @NoArgsConstructor, @AllArgsConstructor, @ToString, @EqualsAndHashCode 등을 함께 사용하는 경우가 대다수
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PersonDto {
private String name;
private int age;
}
@Data어노테이션은@Getter,@Setter,@ToString,@EqualsAndHashCode,@RequiredArgsConstructor를 모두 포함하므로 DTO 객체를 정의할 때 매우 유용