티스토리 뷰
반응형
Lombok이란?
Lombok 프로젝트는 자바 라이브러리로 코드 에디터나 빌드 툴(IntelliJ, Eclipse, XCode 등)에 추가하여 코드를 효율적으로 작성할 수 있도록 도와준다. class명 위에 어노테이션을 명시해줌으로써 getter나 setter, equals와 같은 method를 따로 작성해야 하는 번거로움을 덜어준다.
lombok 어노테이션 중 내가 실제로 개발을 하며 가장 자주 사용했던 어노테이션은 @Data, @NonNull, @NoArgsConstructor/@AllArgsConstructor로 이에 대해 자세히 알아보고자 한다.
@Data
@Data 어노테이션은 @Getter / @Setter, @ToString, @EqualsAndHashCode와 @RequiredArgsConstructor 를 합쳐놓은 종합 선물 세트라고 할 수 있다. POJO(Plain Old Java Objects)와 bean과 관련된 모든 보일러플레이트(boilerplate =재사용 가능한 코드)를 생성한다. class의 모든 필드에 대한 getter, setter, toString, equals와 같은 함수들 말이다.
// lombok annotation 사용
@Data
public class Example {
private String name;
private double score;
}
// lombok annotation 미사용
public class Example {
private String name;
private double score;
public DataExample(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setScore(double score) {
this.score = score;
}
public double getScore() {
return this.score;
}
@Override public String toString() {
return "DataExample(" + this.getName() + ", " + this.getAge() + ", " + this.getScore() + ", " + Arrays.deepToString(this.getTags()) + ")";
}
protected boolean canEqual(Object other) {
return other instanceof DataExample;
}
@Override public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof DataExample)) return false;
DataExample other = (DataExample) o;
if (!other.canEqual((Object)this)) return false;
if (this.getName() == null ? other.getName() != null : !this.getName().equals(other.getName())) return false;
if (this.getAge() != other.getAge()) return false;
if (Double.compare(this.getScore(), other.getScore()) != 0) return false;
if (!Arrays.deepEquals(this.getTags(), other.getTags())) return false;
return true;
}
@Override public int hashCode() {
final int PRIME = 59;
int result = 1;
final long temp1 = Double.doubleToLongBits(this.getScore());
result = (result*PRIME) + (this.getName() == null ? 43 : this.getName().hashCode());
result = (result*PRIME) + this.getAge();
result = (result*PRIME) + (int)(temp1 ^ (temp1 >>> 32));
result = (result*PRIME) + Arrays.deepHashCode(this.getTags());
return result;
}
}
Data 어노테이션은 callSuper, includeFieldName, exclude와 같은 파라미터와 같이 사용될 수 없으므로, 해당 파라미터 사용이 필요할 때는 개별 어노테이션을 따로 다 명시해주면 되겠다.
@Getter
@Setter
@ToString(includeFieldNames=true)
@EqualsAndHashCode
@RequiredArgsConstructor
public class Example {
private String name;
private double score;
}
반응형
'괴발개발' 카테고리의 다른 글
[JAVA] mockMVC containsInAnyOder 예제 (0) | 2021.01.24 |
---|---|
boilerplate(보일러플레이트)란? (0) | 2021.01.18 |
[MAC Air 2012 Mid] 부트캠프로 Windows 10 설치하기 (3) | 2021.01.11 |
[JAVA] MongoDB distinct 사용하기 (0) | 2021.01.10 |
[JAVA] Eclipse에서 MongoDB 연동하기 (0) | 2021.01.09 |
반응형