Lombok 라이브러리 자주 사용되는 어노테이션 정리
Lombok 라이브러리 자주 사용되는 어노테이션 정리
코드를 작성할때 반복되는 코드들을 줄여주는 라이브러리이다. 도메인 객체나 Entity 와 같은 클래스를 만들때 수 많은 멤버변수들이 있고 상황에 맞게 getter와 setter, toString, 생성자 등을 만들 필요가 있는데 이러한 코드 중복을 롬복을 통해 간단한 어노테이션 선언만으로 사용할 수 있다.
코드상에서는 롬복 어노테이션만 보이지만 컴파일과정에서 선언한 어노테이션에 맞는 코드가 작성되어 컴파일이 된다. 이러한 점들로 인하여 생산성이 향상되며 가독성이 올라가게 된다.
이제 자주 사용되는 어노테이션을 정리한다.
@Getter // @Setter
접근자와 설정자 생성. 선언된 필드에 getter와 setter를 자동 생성해준다. 사용법은 필드명 = xxx일때 getXxx() <- 대소문자구분 setXxx() 이며 타입이 boolean인 경우네는 isXxx() 로 메서드를 생성해준다.
@NoArgsConstructor // @RequiredArgsConstructor // @AllArgsConstructor
생성자 생성. @NoArgsConstructor는 이름에서도 알 수 있듯이 파라미터가 없는 기본생성자를 생성해주고 @AllArgsConstructor은 반대로 모든 필드값을 파라미터로 받는 생성자를 만들어준다. @RequiredArgsConstructor은 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어준다.
@ToString
toString() 메서드 기능을 대신해준다. 이때 옵션으로 exclude 기능을 사용하면 선언한 필드명은 결과에 제외시킨다.
@ToString(exclude = "password")
public class User {
private Long id;
private String username;
private String password;
private int[] scores;
}
@EqualsAndHashCode
equals와 hashCode 메서드를 자동생성해준다. equals는 두 객체의 내용이 같은지 동등성을 비교하는 연산자이고, hashCode는 두 객체가 같은 객체인지 동일성을 비교하는 연산자이다.
callSuper라는 속성을 이용하여 부모 클래스의 필드까지 감안할지 안할지에 대해서 설정이 가능하다. true로 설정하면 부모 클래스 필드 값들도 동일한지 체크, false일때는 자신 클래스의 필드 값들만 고려한다. 디폴트 값은 false이다.
@EqualsAndHashCode(callSuper = true)
public class User extends Domain {
private String username;
private String password;
}
@Data
마지막으로 @Data 어노테이션은 위에 있는 모든 어노테이션 (@Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode)들을 포함하고 있는 어노테이션이다. 생성자는 RequiredArgsConstructor이기에 final 또는 @NonNull 필드 값을 파라미터로 받는 생성자가 만들어진다.