compileOnly 'org.projectlombok:lombok:1.18.12' annotationProcessor 'org.projectlombok:lombok:1.18.12' testCompileOnly 'org.projectlombok:lombok:1.18.12' testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
-J-Xmx1024m
AccessLevel.NONE
설정으로 특정 필드 등에 대한 자동 메소드 생성을 막을 수 있다.// 모든 필드에 대해 Getter/Setter를 생성하지만 age 필드의 Setter는 생성하지 않는다. @Data public class Person { @Setter(AccessLevel.NONE) private int age; }
@ToString(excluded={“propertyName”})
형태로 출력시 제외토록 만들어야 한다.@EqualsAndHashCode(of = {})
로 꼭 필요한 필드만 비교하도록 처리한다.@SuppressWarnings("checkstyle:HideUtilityClassConstructor")
equals&hashCode
를 그대로 사용하고자 하는 상황에서 Java FindBugs의 경고를 회피하려면 자식 클래스 쪽에 다음과 같이 설정한다.@EqualsAndHashCode(callSuper = true, of = {})
of = { }
를 넣지 않으면, 자식 클래스의 모든 필드가 비교 대상으로 들어가 버리게 된다.lombok.delombok.ant.DelombokTask
lombok.delombok.ant.Tasks$Delombok
boolean isRunning
→ isRunning()
, setRunning()
boolean running
→ 위와 동일하게 isRunning()
, setRunning()
boolean isRunning
과 boolean running
이 둘 다 존재하면 컴파일 에러 발생.Boolean running
→ getRunning()
, setRunning()
@AllArgsConstructor
, @RequiredArgsConstructor
등에서 자동으로 생성해주던 @ConstructorProperties(필드정보)
가 자동으로 생성이 안되게 바뀐다.lombok.config
에서 lombok.anyConstructor.addConstructorProperties=true
를 명시적으로 주면 자동 생성된다. 하지만 @XXXArgsConstructor, @Data, @Value
를 모두 없애고 생성자를 직접 만들어주고, 기본 생성자를 추가해주는 게 낫다.BREAKING CHANGE: lombok config key lombok.anyConstructor.suppressConstructorProperties is now deprecated and defaults to true, that is, by default lombok no longer automatically generates @ConstructorProperties annotations. New config key lombok.anyConstructor.addConstructorProperties now exists; set it to true if you want the old behavior. Oracle more or less broke this annotation with the release of JDK9, necessitating this breaking change.
@JsonProperty
를 비롯한 여러 annotation이 getter/setter 로 복제가 된다.@JsonProperty
값과 getter 의 이름이 다를 경우 두개가 다 외부 응답으로 나갔었는데, getter 의 이름으로 나가던 필드를 사용하는 타 팀이 존재할 경우 값자기 getter 이름쪽 응답이 사라져버린다.BREAKING CHANGE: Lombok will now always copy specific annotations around (from field to getter, from field to builder 'setter', etcetera): A specific curated list of known annotations where that is the right thing to do (generally, @NonNull style annotations from various libraries), as well as any annotations you explicitly list in the lombok.copyableAnnotations config key in your lombok.config file. Also, lombok is more consistent about copying these annotations. (Previous behaviour: Lombok used to copy any annotation whose simple name was NonNull, Nullable, or CheckForNull). Issue #1570 and Issue #1634
@JsonProperty("isXxx") private int isXxx; -> 진짜 생성은 @JsonProperty("isXxx") private int isXxx; public void setXxx(int xxx) { this.isXxx = xxx; } -> 이로 인해서 JSON 에 ''isXxx'', ''xxx'' 두개의 필드가 존재하게 됨.
@JsonProperty("isXxx") private int isXxx; -> 진짜 생성은 @JsonProperty("isXxx") private int isXxx; // 아래 setter 에도 @JsonProperty 가 붙어버림 @JsonProperty("isXxx") public void setXxx(int isXxx) { this.isXxx = isXxx; }
@JsonProperty('isXxx')
명시해서 추가해줌.isXxx
필드와 isXxx()
를 서로 다른 프라퍼티로 인식하는 것이다.isXxx
필드의 getter/setter 는 isIsXxx()
, setIsXxx()
여야하는게 맞기 때문에, isXxx()
를 isXxx
필드와 다른 프라퍼티로 인식하는 것이다.is로시작
하지만 프라퍼티 이름은 is를 빼고 만들고 싶어하는 경향이 있는데, 그게 Lombok 에 반영돼있어서 발생한 문제이다.