Lombok 라이브러리는 Java 개발자들이 코드를 더욱 효율적으로 작성할 수 있도록 도와주는 유용한 도구입니다. 이 라이브러리는 특히 반복적인 코드를 줄이는데 효과적인데, 이를 가능하게 하는 주요 구성 요소 중 하나가 바로 어노테이션입니다.
다음은 Lombok의 주요 어노테이션에 대한 간략한 설명입니다.
@AllArgsConstructor
는 모든 필드 값을 인자로 받는 생성자를 만들어주는 어노테이션입니다.
@AllArgsConstructor
public class ExampleClass {
private int x;
private int y;
}
위 코드는 아래와 같이 변환됩니다.
public class ExampleClass {
private int x;
private int y;
public ExampleClass(int x, int y) {
this.x = x;
this.y = y;
}
}
@NoArgsConstructor는 인자가 없는 기본 생성자를 만들어주는 어노테이션입니다.
@NoArgsConstructor
public class ExampleClass {
private int x;
private int y;
}
위 코드는 아래와 같이 변환됩니다.
public class ExampleClass {
private int x;
private int y;
public ExampleClass() {
}
}
@RequiredArgsConstructor는 final
키워드 또는 @NonNull
이 붙은 필드에 대해 생성자를 생성하는 역할을 합니다. 또한, 이 어노테이션은 의존성 주입(DI)에도 영향을 미칩니다.
@RequiredArgsConstructor
public class ExampleClass {
private final int x;
@NonNull
private String y;
}
public class ExampleClass {
private final int x;
private String y;
public ExampleClass(int x, @NonNull String y) {
if (y == null) {
throw new NullPointerException("y는 null입니다.");
}
this.x = x;
this.y = y;
}
}
y 필드는 @NonNull 어노테이션이 붙어 있으므로, null이 아닌 값을 지정해야 하며, 만약 null 값을 지정하면 NullPointerException이 발생합니다.
@Data는 Lombok의 강력한 어노테이션으로, @Getter, @Setter, @AllArgsConstructor, @NoArgsConstructor, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode 어노테이션을 모두 포함하는 결정체입니다.
@Data
public class ExampleClass {
private int x;
private int y;
}
public class ExampleClass {
private int x;
private int y;
// 기본 생성자
public ExampleClass() {
}
// 모든 필드를 인자로 받는 생성자
public ExampleClass(int x, int y) {
this.x = x;
this.y = y;
}
// Getter 메소드
public int getX() {
return this.x;
}
// Setter 메소드
public void setX(int x) {
this.x = x;
}
// Getter 메소드
public int getY() {
return this.y;
}
// Setter 메소드
public void setY(int y) {
this.y = y;
}
// equals 메소드
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof ExampleClass)) {
return false;
}
ExampleClass that = (ExampleClass) o;
return x == that.x && y == that.y;
}
// hashCode 메소드
@Override
public int hashCode() {
return Objects.hash(x, y);
}
// toString 메소드
@Override
public String toString() {
return "ExampleClass{" +
"x=" + x +
", y=" + y +
'}';
}
}
equals, hashCode, toString 메소드는 각각 객체의 동일성 비교, 해시 코드 생성, 문자열 표현을 위한 메소드입니다. 이들 메소드는 Java의 모든 클래스가 기본적으로 가지고 있어야 하는 메소드들이지만, 매번 직접 구현하는 것은 번거로울 수 있습니다. 이런 경우 Lombok의 @Data 어노테이션을 활용하면 편리하게 이들 메소드를 자동으로 생성할 수 있습니다.
Lombok 라이브러리를 사용하며 그 편리함을 몸소 체험했지만, 코드를 Lombok 어노테이션으로 도배하거나, @Data를 무분별하게 사용하는 것이 바람직하지 않다는 것을 알고 있었습니다. 그러나 그 이유에 대해서는 정확히 알지 못했습니다. 이번 기회에 Lombok 어노테이션에 대해 공부하면서 어떤 식으로 코드가 생성되는지, 어떤 원리로 작동하는지를 명확하게 이해할 수 있었습니다. 이를 통해, 코드가 의도치 않게 작동하는 것을 방지하고, Lombok 어노테이션을 더욱 적절하게 활용해야겠다고 느꼈습니다.