웹 프로그래밍/[ Spring Boot ]

[ SpringBoot ] 04. Lombok 라이브러리

kim.svadoz 2021. 10. 12. 16:56
728x90
반응형

Lombok

Lombok은 자바의 반복 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리이다.

보통 DTO, Model, Entity의 경우 여러 속성이 존재하고 이들의 프로퍼티에 대해서 Getter, Setter, 생성자 등 매번 작성해줘야 하는 부분을 자동으로 만들어주는 라이브러리이다.

코딩과정에서는 어노테이션만 보이지만, 실제 컴파일된 .class 파일에는 연관 코드들이 생성되어 있게 된다.

귀찮은 과정을 줄여주고 반복되는 코드작성을 대신하기 때문에 많은 개발자들이 사용하고 있지만 호불호가 갈리는 라이브러리이기도 하며, 개별 작동방식을 잘 알고 사용하는 것이 좋다.

  • @Getter, @Setter
    • @Getter와 @Setter를 클래스 이름 위에 적용 시키면 모든 non-static 변수들에 대한 getter, setter 메소드를 사용할 수 있고, 변수이름 위에 따로 사용할 수도 있다.
    • 자동으로 생성되는 메소드의 기본은 public이며 AccessLevel을 통해 명시적으로 생성할 수도 있다.
    • 열거형 변수에는 getter를 사용할 수 있지만, setter를 사용할 수 없다.
    • 이름이 같고 매개변수의 수가 같은 메소드가 존재한다면 혼동을 방지하여 메소드가 생성되지 않는다.
  • @NonNull
    • 메소드나 생성자에 사용하게 되면 null check를 해준다.
  • @AllArgsConstructor
    • 모든 변수를 사용하는 생성자를 만들어준다.
  • @NoArgsConstructor
    • 파라미터가 없는 기본 생성자를 만들어준다.
  • @RequiredArgsConstructor
    • 특정 변수만을 활용하는 생성자를 만들어준다.
    • 초기화 되지 않은 final 필드나,@NonNull` 어노테이션이 붙여진 필드에 대해 생성자를 만들어준다.
  • @EqaulsAndHashCode
    • 클래스에 대한 eqauls 함수와 hashCode 함수를 생성해준다.
    @EqualsAndHashCode(of = {"name", "description"}, callSuper = false)
    public class Example extends Common {
        String name;
        String description;
    }
    • 서로 다른 두 객체에서 특정 변수의 이름이 같은 경우 같은 객체로 판단하고자 할 때 위와 같이 사용한다.
    • callSuper=false는 Common을 상속하는데, 이 상위 클래스는 적용시키지 않을 때 사용한다.
    • .include.Exclude를 활용해서 명시적으로 선택할 수도 있다.
    • 자기 자신을 포함하는 배열을 가지거나 순환 참조가 존재하는 경우 명시적으로 제외하지 않으면 StackOverFlowError가 발생한다.
  • @ToString
    • 클래스 변수들의 ToString() 메소드를 생성해준다.
    • 출력을 원하지 않는 변수는 @ToString.Exclude 어노테이션을 붙여주면 제외할 수 있다.
    • callSuper=true는 마찬가지로 상위클래스에 대해서 적용하고자 할때 사용된다.
    • .include.Exclude를 활용해서 명시적으로 선택할 수도 있다.
  • @Data
    • @Getter, @Setter, @RequiredArgsConstructor, @EqaulsAndHashCode, @ToString 어노테이션을 자동생성한다.
  • @Value
    • @Data의 불변 클래스 버전으로 모든 필드를 private final로 만들고 setter는 생성되지 않는다.
    • 클래스 또한 final로 만든다.
  • @Builder
    • 해당 클래스의 객체 생성에 빌더 패턴을 적용시켜준다.
    • 모든 변수들에 대해 빌더 패턴을 적용하려면 클래스 위에 어노테이션을 붙이고, 특정 변수만 하고 싶은 경우는 원하는 생성자를 생성하고 생성자 위에 어노테이션을 붙여준다.
    • 오직 @NoArgsConstructor와 함께 사용하면 컴파일 에러가 난다. 빌더 패턴을 위한 모든 프로퍼티를 필요로 하기 때문에 @AllArgsConstructor도 반드시 함께 사용해야 한다.
    • 모든 생성자를 직접 만들어도 된다
  • @Delegate
    • 한 객체의 메소드를 다른 객체로 위임한다.
    • 음.. 잘 쓰지 않는 것 같다
  • @Log4j2
    • 해당 클래스의 로그 클래스를 자동완성 시켜준다.
  • @CleanUp
    • close()를 호출해준다.
728x90
반응형