사용자 도구

사이트 도구


java:lombok:upgrade

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
다음 판 양쪽 다음 판
java:lombok:upgrade [2022/06/23 11:16]
kwon37xi
java:lombok:upgrade [2022/06/27 16:25]
kwon37xi
줄 11: 줄 11:
  
 ===== 문제된 설정들 ===== ===== 문제된 설정들 =====
 +==== 1.16.20 lombok.anyConstructor.addConstructorProperties ====
   * ''1.16.20'' : ''lombok.anyConstructor.addConstructorProperties'' 기본값이 ''false''로 변경되었다.   * ''1.16.20'' : ''lombok.anyConstructor.addConstructorProperties'' 기본값이 ''false''로 변경되었다.
   * 그 이전 버전에서는 ''@XXXConstructor'', ''@Data'', ''@Value'' 등을 사용할 경우 [[https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/java/beans/ConstructorProperties.html|@java.beans.ConstructorProperties]] 로 생성자에 생상자 파라미터의 이름을 주입해줬고, [[java:jackson|Java Jackson JSON Library]] 등의 라이브러리가 객체 생성시 이 애노테이션 정보를 통해 객체를 생성했었다.   * 그 이전 버전에서는 ''@XXXConstructor'', ''@Data'', ''@Value'' 등을 사용할 경우 [[https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/java/beans/ConstructorProperties.html|@java.beans.ConstructorProperties]] 로 생성자에 생상자 파라미터의 이름을 주입해줬고, [[java:jackson|Java Jackson JSON Library]] 등의 라이브러리가 객체 생성시 이 애노테이션 정보를 통해 객체를 생성했었다.
줄 17: 줄 18:
   * **스스로 생성자에 @ConstructorProperties 를 붙여주거나**   * **스스로 생성자에 @ConstructorProperties 를 붙여주거나**
   * ''lombok.anyConstructor.addConstructorProperties=true'' 로 설정한다.   * ''lombok.anyConstructor.addConstructorProperties=true'' 로 설정한다.
 +
 +==== 1.18.4 Field 에 붙은 annotation 이 setter 로 복사됨 ====
 +  * field 에 붙은 annotation 이 setter 로 복사되는데, 평상시에는 이게 큰 문제가 없으나 **필드가 ''is''로 시작하는 boolean 일 경우 문제 발생소지가 있음.**
 +  * 이유는 ''booean isSomething;'' 필드는 Lombok 이 **''something''** 이라는 프라퍼티로 간주하고 getter/setter 는 사실상 ''setSomething/isSomething''으로 생성되는데, 문제는 ''isSomething'' 이라는 것을 직접 읽는 프레임워크는 프라퍼티를 ''isSomething''으로 해석해버림. 그런데 getter/setter 에 ''isSomething()/setSomething()''은 Java Bean 표준상 프라머티가 ''something'' 이다.
 +  * 즉, 일부 라이브러리([[java:jackson|Java Jackson JSON Library]])가 필드와 getter/setter 두가지 모두로 프라퍼티를 판단할 경우 어느 것을 기죽으로 개발자가 property 를 사용했는지 판단하기 힘들다.
 +  * 이 때 annotation 이 필드(''isSomething'' 프라퍼티)와 메소드(''something'')에 둘다 적용되면서 두 프라퍼티 중 하나는 잘못 작동하게 된다.
java/lombok/upgrade.txt · 마지막으로 수정됨: 2022/06/27 16:32 저자 kwon37xi