본문 바로가기

개발 지식/Java

[Java] Lombok 정리

반응형

[Java] Lombok 정리

@Data

getter, setter, toString, hasCode, equals, constructor 등을 자동으로 생성해준다. 해당 어노테이션에 있는 속성인 staticConstructor는 static한 생성자를 만들어주는 속성이다.

@Data(staticConstructor = "of") public class DataObject { private final Long id; private String name; }

위와 같이 VO 객체를 staticConstructor 속성을 사용하여 @Data 어노테이션을 사용한다면 실제 사용할때는 다음과 같이 사용할 수 있다.

DataObject dataObjcect = DataObject.of(1L);

id 같은 경우에는 final이라 필수 생성자에 포함되어 있다. 따라서 staticConstructor 속성을 사용한다면 new로 객체를 생성할 수 없다. 즉, DataObject dataObject = new DataObject(); 는 컴파일 에러가 난다.

@ArgsConstructor

생성자를 만들어주는 어노테이션으로서 다음과 같이 3가지가 있다.

  • @NoArgsConstructor : 디폴트 생성자만 만들어준다.
  • @AllArgsConstructor : 모든 필드의 생성자를 만들어준다.
  • @RequiredArgsConstructor : 필수 생성자만 만들어준다.

위 어노테이션에 속한 속성은 다음과 같다.

  • staticName : @Data의 staticConstructor 속성과 같은 역할을 한다. (=static한 생성자를 만들어준다.)
  • access : 'PUBLIC', 'MODULE', 'PROTECTED', 'PACKAGE', 'PRIVATE' 의 값으로 접근 제한자를 설정할 수 있다.
  • onConstructor : 생성자에 어노테이션을 작성할 수 있다.

@Getter와 @Setter

getter와 setter를 생성해준다. 클래스 레벨, 필드 레벨 모두 사용 가능하다. 공통 속성으로는 value, onMethod 속성이 존재한다. value의 경우에는 접근제한을 할 수 있으며 onMethod 는 method의 어노테이션을 작성할 수 있다.

  • 예시

    public class GetSetObject { @Getter(value = AccessLevel.PACKAGE, onMethod = @__({@NonNull, @Id})) private Long id; }

    위와 같은 코드를 작성하였을 경우, 다음과 같은 코드가 작성이 될 수 있다.

    class GetSetObjectOnMethod { private Long id; @Id @NonNull Long getId() { return id; } }

그리고 @Getter 에는 'lazy' 라는 속성이 있고, @Setter 의 경우에는 'onParam' 이라는 속성이 있다.

  • @Getter 'lazy' 예시

    @Getter(value = AccessLevel.PUBLIC, lazy = true) private final String name = expensive(); private String expensive() { return "hochoon"; }

lazy가 true일 때는 무조건 final 필드어야만 한다. lazy 속성이 false일 경우에는 객체를 생성할 때 expensive() 를 호출하지만 true일 경우에는 getName()을 호출할 때 expensive()를 호출한다.

  • @Setter 'onParam' 예시 ⇒ 파라미터의 어노테이션을 작성할 수 있는 속성

    @Setter(onParam = @__(@NotNull)) private Long id; class GetSetObjectOnParam { private Long id; public void setId(@NotNull Long id) { this.id = id; } }

@ToString

{className}{field1=value, field2=value, ...) 형태의 toString()을 만들어준다.

@UtilityClass

유틸리티 클래스에 적용하는 어노테이션. @UtilityClass 은 기본생성자가 private 으로 생성되며 만약 reflection 혹은 내부에서 생성자를 호출할 경우에는 UnsupportedOperationException 이 발생한다.

  • 예시

    @UtilityClass public class UtilityClassObject { public static String name() { return "wonwoo"; } }

Reference

반응형