Lombok 어노테이션
Lombok이란?
- 자바에서 Model Object를 생성 할 때, 멤버필드에 대한 getter, setter, toString 및 생성자 등에 대한 코드가 반복적으로 사용된다.
롬복(Lombok)은 이러한 메서드들을 어노테이션을 통해 줄여주는 자바 라이브러리이다.
@Getter / @Setter
접근자(getter)와 설정자(setter)에 대한 메소드 생성을 지원한다.
특정 필드에 어노테이션을 추가하면 자동으로 접근자와 생성자 메소드를 사용할 수 있다.
또한 필드 레벨이 아닌 클래스 레벨에 선언할 경우, 모든 필드에 적용된다.
(setter는 final인 필드에 대해서는 제외된다.)
public class User {
private final String id;
private String name;
private int age;
public String getName() {
return name;
}
public String getName() {
return name;
}
public String setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
@Getter
@Setter
public class User {
private final String id;
private String name;
private int age;
}
@NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor
생성자에 대한 자동 생성을 지원한다.
-
@NoArgsConstructor - 파라미터가 없는 기본 생성자
-
@AllArgsConstructor - 모든 값을 파라미터로 받는 생성자
-
@RequiredArgsConstructor - final 또는 @NotNull 필드 값만 파라미터로 받는 생성자
public class User {
private final String id;
private String name;
private int age;
public user() {
}
public user(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public user(String id) {
this.id = id;
}
}
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
private final String id;
private String name;
private int age;
}
@ToString
모든 필드를 출력하는 toString() 메소드를 생성한다.
@ToString(exclude = "id")와 같이 특정 필드만 제외시킬 수도 있다.
public class User {
private final String id;
private String name;
private int age;
@Override
public String toString() {
return "id=" + this.id + ", name=" + this.name + ", age=" + this.age;
}
}
@ToString
public class User {
private final String id;
private String name;
private int age;
}
@EqualsAndHashCode
자바 bean에서 동등성 비교를 위해 사용하는 equals와 hashCode 메소드를 생성한다.
-
equals : 두 객체의 내용이 같은지, 동등성(equality) 를 비교하는 연산자
-
hashCode : 두 객체가 같은 객체인지, 동일성(identity) 를 비교하는 연산자
@EqualsAndHashCode(callSuper=true)로 설정할 경우 부모 클래스의 필드 값까지 동일한지 체크한다.
(기본설정은 false)
@Data
@Getter와 @Setter, @ToString, @RequiredArgsConstructor, @EqualsAndHashCode를 한번에 설정해준다.
Lombok 사용 시 주의점
롬복은 반복되는 코드를 줄여주어 코드의 가독성과 생산성에 도움을 준다.
하지만 편리성을 제공하는만큼 잘못 사용할 경우 문제가 될 수 있기에 주의할 점을 파악하고 API의 내부 동작을 숙지하고 사용해야한다.
대표적으로 toString 메소드로 인한 순환참조 문제, 무분별한 Setter 남용으로 인한 객체 불변성 보장불가 문제 등이 있다.
주의점에 대한 예시는 링크로 대체한다.