Lombok 라이브러리

minyeob·2024년 2월 1일
0

Spring

목록 보기
4/11

Lombok 어노테이션에 대한 이해

Lombok 라이브러리는 Java 개발자들이 코드를 더욱 효율적으로 작성할 수 있도록 도와주는 유용한 도구입니다. 이 라이브러리는 특히 반복적인 코드를 줄이는데 효과적인데, 이를 가능하게 하는 주요 구성 요소 중 하나가 바로 어노테이션입니다.

다음은 Lombok의 주요 어노테이션에 대한 간략한 설명입니다.

@AllArgsConstructor

@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는 인자가 없는 기본 생성자를 만들어주는 어노테이션입니다.

@NoArgsConstructor
public class ExampleClass {
    private int x;
    private int y;
}

위 코드는 아래와 같이 변환됩니다.

public class ExampleClass {
    private int x;
    private int y;

    public ExampleClass() {
    }
}

@RequiredArgsConstructor

@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

@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 어노테이션을 더욱 적절하게 활용해야겠다고 느꼈습니다.

profile
백엔드 개발자를 꿈꾸며 공부한 내용을 기록하고 있습니다.

0개의 댓글