[JAVA] Lombok Annotation 정리
- ⭐ Web Programming/Spring
- 2021. 12. 15.
1. 시작하며
롬복 어노테이션 사용시에 자꾸 헷갈려서 개인적인 기억 정리 용도로 기록해 두고자 한다.
2. 왜 Lombock을 쓰나?
Getter, Setter, Constructor 등을 자동으로 생성해줘서 귀찮은 일을 줄여 준다. 단, 무한루프에 빠지거나 무분별하게 setter를 남발할 수 있으니 조심해서 쓰자
3. Lombok 설치
maven
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
gradle
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
gradle 5버전 이상은 annotationProcessor 'org.projectlombok:lombok'
을 추가해주어야 한다. 그렇지않으면 아래와 같은 에러가 발생한다.
error: variable name not initialized in the default constructor
4. Lombok Annotation 정리
Spring in Action 에서 공부한 내용을 참고하였다.
https://projectlombok.org/features/all
@NonNull
자동으로 null 체크를 진행하여 null 인 경우 NullPointerException 을 발생 시킨다.
@Cleanup
자동으로 자원을 관리한다. close()
메소드를 호출하여 자원을 종료시킨다.
@Getter, @Setter
getter, setter를 생성해준다.
Entity 클래스 내에서는 Setter를 만들지 않도록 하자. 해당 필드에 변경이 필요하면 그 목적과 의도를 나타낼 수 있는 메소드를 추가해야한다.
public class Order {
private OrderStatus orderStatus;
public void cancel() {
this.setOrderStatus(OrderStatus.CANCEL);
}
}
public void cancelOrder(Long orderId) {
Order order = orderRepository.findOne(orderId);
order.cancel();
}
@ToString
ToString
메소드를 생성 해준다.
@EqualsAndHashCode
hashCode
, equals
를 구현해준다.
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
@NoArgsConstructor
매개변수가 없는 생성자 구현@RequiredArgsConstructor
final,@NonNull
이 있는 필드가 포함된 생성자를 구현@AllArgsConstructor
모든 필드를 매개변수로 갖는 생성자를 구현
@Data
@ToString
, @EqualsAndHashCode
, @Getter
on all fields,
and @Setter
on all non-final fields,
and @RequiredArgsConstructor
!
@Builder
해당 클래스에 빌드 패턴을 적용한 클래스를 생성해준다. 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함된다.
생성자나 빌더나 생성 시점에 값을 채워준다. 그러나 아래와 같은 차이점이 있다.
- 생성자 : 지금 채워야 하는 필드가 무엇인지 정확히 지정 할 수 없다.
- 빌더 : 어느 필드에 어떤 값을 채워야 할지 명확히 인지 할 수 잇다.
@Builder
public class Person {
private String name;
private int age;
private Set<String> occupations;
}
Person.builder()
.name("Adam Savage")
.city("San Francisco")
.job("Mythbusters")
.job("Unchained Reaction")
.build();
Data
,@ToString
,@Setter
등의 기능은 성능 또는 객체 안정성 이슈로 인해 주의하여 사용해야한다.
5. 마치며
롬복을 통해 코드량을 줄일 수 있다. 그러나 주의해서 사용해야 한다.
우선 공식문서에 상세한 예제가 많으니 공식 문서부터 확인하자. 그리고 다른 블로그에 더 좋은 설명이 많으니 이를 읽어보자.
참고
- https://projectlombok.org/features/all
- https://www.daleseo.com/lombok-popular-annotations/
- https://www.daleseo.com/lombok-useful-annotations/
- 스프링부트와 AWS로 혼자 구현하는 웹서비스