반응형
Lombok을 왜 쓰냐?
Getter, Setter, Contructor 등을 자동으로 생성해줘서 귀찮은 일을 줄여 준다. 단, 무한 루프에 빠지거나 무분별하게 setter를 남발할 수 있으니 조심!
Annotaion 정리
- @NonNull : 자동으로 null 체크를 진행하며 null인 경우 NullpointException 을 발생 시킨다.
- @Cleanup : 자동으로 자원을 관리한다. close() 메소드를 호출하여 자원을 종료시긴다.
- @Getter getter 를 생성해준다.
- lazy : Getter 를 캐시하며, Getter가 CPU가 많이 필요하거나 메모리가 많이 필요한 표현식의 경우 유용 (private final 변수에만 사용 가능, 롬복에서 잠금 처리하여 Thread-safe 일 필요 없다.)
- onMethod_ = {@어노테이션, …} : 생성되는 메소드에 어노테이션 추가
- value : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
- @Setter : setter 를 생성해준다. Entity 클래스 내에서는 Setter를 만들지 않도록 하자. 해당 필드에 변경이 필요하면 그 목적과 의도를 나타낼 수 있는 메소드를 추가 해야한다.
- onParam_ = {@어노테이션, …} : Setter의 매개 변수에 어노테이션 추가
- onMethod_ = {@어노테이션, …} : 생성되는 메소드에 어노테이션 추가
- value : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
public class Order { private OrderStatus orderstatud; public void cancel() { this.setOrderStatus(OrderStatus.CANCEL); } } public void cancelOrder (Long orderId) { Order order = orderRepository.findOne(orderId); order.cancel(); }
- @ToString : ToString 메소드를 생성해준다.
- includeFieldNames : 이름-값 쌍으로 표현할지 값만 표현할지 여부
- of : 포함할 필드 설정
- exclude : 제외할 필드 설정
- callSuper : 슈퍼 클래스의 toString메소드 출력을 포함시킬지 여부
- doNotNuseGetters : toString 메소드 구현에 Getter 메소드를 사용하지 않고 this를 사용할지 여부
- onlyExplicitlyIncluded : 필드에 설정된 @ToString.Include 또는 @ToString.Exclude를 적용시킨다.
- @EqualsAndHashCode : hashCode, equals 를 구현해 준다.
- callSuper 속성을 통해 메소드 자동 생성 시 부모 클래스의 필드까지 포함할지 말지에 대해서 설정할 수 있다. (default 는 false 값)
- cacheStrategy : hashCode 의 호출 결과를 캐시하여 이후 호출에 사용할지 여부
- of : 포함할 필드 설정
- exclude : 제외할 필드 설정
- donetuseGetters : toString 메소드 구현에 Getter 메소드를 사용하지 않고 this를 사용할지 여부
- onlyExplicitlyIncluded : 필드에 설정된 @EqualsAndHashCode.Include 또는 @EqualsAndHashCode.Exlcude 를 적용시킨다.
- @EqualsAndHashCode(callSuper = true) public class Order extends domain { }
- @NoArgsContructor, @RequiredArgsConstructor, @AllArgsConstructor
- @NoArgsContructor : 매개변수가 없는 생성자 구현
- force : final 필드가 존재할 때 이를 null 또는 0 으로 초기화해 기본 생성자를 만들 수 있게 한다.
- access : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
- onConstructor_ = {@어노테이션, …} : 생성된 생성자에 어노테이션 추가
- staticName : 해당 생성자를 사용하는 static 생성자를 추가
public Order (){}
- @RequiredArgsConstructor : final, @NonNull이 있는 필두가 포함된 생성자를 구현
- access : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
- onConstructor_ = {@어노테이션, …} : 생성된 생성자에 어노테이션 추가
- staticName : 해당 생성자를 사용하는 static 생성자를 추가
- @AllArgsConstructor : 클래스의 모든 필드를 매개변수로 갖는 생성자를 구현
- access : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
- onContructor_ = {@어노테이션, …} : 생성된 생성자에 어노테이션 추가
- staticName : 해당 생성자를 사용하는 static 생성자를 추가
- @NoArgsContructor : 매개변수가 없는 생성자 구현
- @Data
- @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor 를 포함
- @Builder
- 해당 클래스에 빌드 패턴을 적용한 클래스를 생성해준다. 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함된다. 생성자나 빌더가 생성 시점에 값을 채워준다. 그러나 아래와 같은 차이점이 있다.
- 생성자 : 지금 채워야 하는 필드가 무엇인지 정확히 지정 할 수 없다.
- 빌더 : 어느 필드에 어떤 값을 채워야 할지 명확히 인지할 수 있다.
@Builder public class Person { private String name; private int age; private Set<String> occupations; } Person.builder() .name("aa") .city("aa") .job("aa") .job("bb") .build();
- 해당 클래스에 빌드 패턴을 적용한 클래스를 생성해준다. 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함된다. 생성자나 빌더가 생성 시점에 값을 채워준다. 그러나 아래와 같은 차이점이 있다.
💡 Data, ToString, Setter 등의 기능은 성능 또는 객체 안정성 이슈로 인해 주의하여 사용해야 한다.
참고사이트
반응형
'Spring > Java,Spring' 카테고리의 다른 글
[Spring] 생성자 주입 방식 (0) | 2023.09.22 |
---|---|
Session Storage Strategy (0) | 2023.09.20 |
Java 8 표준 API의 함수형 인터페이스 (0) | 2023.09.17 |
System.nanoTime & System.currentTimeMillis (feat. Intstant.now()) (0) | 2023.09.16 |
Oracle JDK & Open JDK (0) | 2023.09.15 |