[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
'개발 지식 > Java' 카테고리의 다른 글
RandomAccessFile 을 통한 일정 사이즈만큼의 바이트 배열 처리 (0) | 2022.02.18 |
---|---|
[Java] 일자 계산 LocalDateTime 사용법 (0) | 2020.09.21 |
[JAVA] JAR WAR 차이 (0) | 2020.06.27 |
[Java] ParameterizedPreparedStatementSetter setValues해야 하는 컬럼이 많다면? (0) | 2020.06.16 |
[JAVA] Disruptor, Multiple Worker Threads 비교 (0) | 2020.05.09 |