파라미터가 없는 기본 생성자를 생성해준다.
초기화가 필요한 final 변수가 있을 경우 컴파일 에러가 발생한다.
@NoArgsConstructor(force=true)를 사용하면 모든 final 변수는
0 / false / null 로 초기화된다.
그러나 final이 아닌 @NonNull 같은 어노테이션이 있다면 따로 할당해 주어야 한다.
@NoArgsConstructor
public class User {
private Long id;
private String name;
private int age;
}
User user = new User();
@NoargsConstructor(access = AccessLevel.PROTECTED)
Entity나 DTO에서 많이 사용하는데, 무분별한 객체 생성에 대해 체크 할 수 있다. PRIVATE 값으로 설정하면 Proxy 객체 생성 로직에서 오류가 발생할 수 있다.
final 변수, @NonNull 인 변수 값만 받는 생성자를 생성해준다.
@RequiredArgsConstructor
public class User {
private final Long id;
private String name;
private int age;
}
User user = new User(3L);
클래스 내부 모든 필드에 parameter를 받는 생성자를 생성해준다.
parameter의 순서는 클래스 내부에 선언된 필드 순서로 매칭된다.
@AllArgsConstructor
public class User {
private final Long id;
private String name;
private int age;
}
User user = new User(3L, "Rosi", 25);
@AllArgsConstructor와 @RequiredArgsConstructor는 심각한 버그를 발생할 수 있어서 사용 시에 주의하거나, 아예 사용을 권하지 않는 경우도 있다.
클래스 변수의 선언된 순서를 변경한다면 IDE에서 리팩토링도 작동하지 않고, lombok도 변화를 감지하지 못하여 에러는 발생하지 않으나, 비즈니스 로직 에러가 생긴다.
그 대신, IDE 자동 생성 기능 등으로 아래처럼 생성자를 직접 만들고,
필요한 경우에는 직접 만든 생성자에 @Builder 어노테이션을 붙이는 것을 권장하기도 한다.
public class User {
private Long id;
private String name;
private int age;
@Builder
private User(Long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
User 클래스의 name이라는 변수가 있으면, 자동으로 getName(), setName() 메소드를 생성해 준다.
@Getter
@Setter
public class User{
private String name;
}
user.setName("Rosi");
String userName = user.getName();
클래스 이름과 쉼표로 구분된 각 필드 값이 포함된 문자열이 반환된다.
exclude 속성을 사용하면, 특정 필드를 toString() 결과에서 제외시킬 수도 있다.
@ToString(exclude = "age")
public class User {
private Long id;
private String name;
private int age;
}
User user = new User();
user.setId(3L);
user.setName("Rosi");
user.setAge(25);
System.out.println(user);
User(id=3, name=Rosi)
자바 빈을 만들 때 equals와 hashCode 메소드를 자주 오버라이딩 하는데, @EqualsAndHashCode 어노테이션을 사용하면 자동으로 메소드를 생성할 수 있다.
callSuper 속성을 통해 equals와 hashCode 메소드 자동 생성 시 부모 클래스의 필드까지 감안할지 안 할지에 대해서 설정할 수 있다.
@Data는 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정해주는 매우 유용한 어노테이션이다.