Lombok 정리

김상복·2022년 5월 17일
0

@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"; } }

profile
초보 개발자

0개의 댓글