지난 글에서는 생성자를 자동으로 생성해주는 어노테이션에 대해 알아보았다.
이번 글에서는 Getter/Setter와 같이 빈번히 사용되는 유형들의 롬복 어노테이션에 대해 알아볼 것이다.
📌 lombok 주요 어노테이션
◾ 생성자 생성
생성자 자동 생성은 지난 시간에 알아보았지만 다시 간단히 정리하면 아래와 같다. 자세한 설명은 아래 링크를 참조할 수 있다.
2024.02.03 - [웹 개발/java] - [lombok] 생성자 생성 어노테이션 3가지
생성자 자동 생성
@NoArgsConstructructor | 매개변수가 없는 기본 생성자를 생성해준다. |
@AllArgsConstructor | 모든 필드 값을 매개변수로 받는 생성자를 만들어준다. |
@RequiredArgsConstructor | final이나 @NonNull인 필드 값만 매개변수로 받는 생성자를 만들어준다. |
◾ 메서드 생성
접근자/설정자 자동 생성
@Getter | Getter를 자동으로 생성해준다. |
@Setter | Setter를 자동으로 생성해준다. |
기타 유용한 메서드 자동 생성
@ToString | toString() 메서드를 자동으로 생성해준다. |
@EqualsAndHashCode | equals(), hashCode()메서드를 자동으로 생성해준다. |
@With | with()메서드를 자동으로 생성해준다. |
🤔@With?
불변 객체를 쉽게 생성하고 수정할 수 있도록 도와준다. 이 어노테이션을 사용하면 해당 필드 값을 변경한 새로운 객체를 생성하는 메서드가 생성된다. 이 메서드는 기존 객체와 동일한 타입의 객체를 반환하며, 특정 필드의 값만 변경되어 있다.
⚠주의
@ToString은 멤버 변수 중 객체 타입이 존재하고 순환 참조가 있다면 무한 루프가 발생한다. 이 경우 꼭 `exclude`를 사용하는 것이 중요하다.
◾ 통합 기능
@Data | @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor를 모두 포함한 편리한 어노테이션이다. |
@Value | @Data - @Setter + 불변성 |
@Value는 @Data의 변형된 기능이다. 모든 필드를 private final로, 클래스를 final로 설정하고 Setter를 생성하지 않는다. @Value를 사용하면 클래스가 불변성을 가지게 되어 객체의 상태를 변경할 수 없다.
@Data에서 @Setter를 제외한 어노테이션들을 가진다. final이 붙기 때문에 setter는 존재할 수 없다.
@Data - @Setter = @Getter + @Setter + @RequiredArgsConstructor + @ToString + @EqualsAndHashCode
⚠주의
@Data는 @ToString과 마찬가지로 순환참조가 발생하는 경우, 문제가 발생한다. 이 경우에는 `exclude`를 사용할 수 없기 때문에 코드가 길어져도 @Data는 피하는 것이 좋다.
◾ 빌더 패턴
@Builder | 메서드 체이닝을 이용하는 static메서드 builder()를 생성해준다. |
@Builder.Default | 명시적으로 기본값을 설정할 수 있다. |
@Singular | 해당 필드를 컬렉션으로 처리하여 다수의 값을 할당할 수 있다. |
공식문서 https://projectlombok.org/features/Builder
◾ 기타
@NonNull | null-check로직을 자동으로 생성하여 null값이 넘어온 경우 NullPointerException이 발생한다. |
@Log / @Slf4j | 로깅 코드를 자동으로 생성하는데 사용된다. |
@Cleanup | 해당 영역을 벗어날 때 지정된 리소스의 close()를 호출한다. |
@Synchronized | 메서드 또는 코드 블록에 대한 synchronized블록을 자동으로 생성한다. |
@Synchronized는 java의 synchronized의 더 안전하게 변형된 기능이다.
Reference
옵션 정리
https://velog.io/@0giri/Lombok-%EC%82%AC%EC%9A%A9%EB%B2%95
기능별로 정리
https://www.daleseo.com/lombok-popular-annotations/
간략히 정리
https://velog.io/@yeoj1n/Spring-Lombok-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98
'웹 개발 > spring' 카테고리의 다른 글
[spring] dto클래스에 Getter가 필요한 이유 (2) | 2024.02.29 |
---|---|
[lombok] 생성자 생성 어노테이션 3가지 (0) | 2024.02.03 |