사용자 도구

사이트 도구


java:lombok

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:lombok [2021/02/02 18:55]
kwon37xi [1.16.20 @ConstructorProperties]
java:lombok [2022/06/23 11:10] (현재)
kwon37xi
줄 4: 줄 4:
   * [[java:lombok:pitfall|Lombok 사용상 주의점(Pitfall)]]   * [[java:lombok:pitfall|Lombok 사용상 주의점(Pitfall)]]
   * [[java:lombok:field_exist_verify|Lombok Field 지정이 올바른지 검사]]   * [[java:lombok:field_exist_verify|Lombok Field 지정이 올바른지 검사]]
 +  * [[java:lombok:upgrade|Lombok Upgrade]]
   * [[http://notatube.blogspot.kr/2010/12/project-lombok-creating-custom.html|Project Lombok: Creating Custom Transformations]] - 자신만의 Lombok 모듈 만들기   * [[http://notatube.blogspot.kr/2010/12/project-lombok-creating-custom.html|Project Lombok: Creating Custom Transformations]] - 자신만의 Lombok 모듈 만들기
   * [[https://www.baeldung.com/lombok-custom-annotation|Implementing a Custom Lombok Annotation | Baeldung]]   * [[https://www.baeldung.com/lombok-custom-annotation|Implementing a Custom Lombok Annotation | Baeldung]]
줄 81: 줄 82:
   * 1.4 이하 Ant 태스크 : ''lombok.delombok.ant.DelombokTask''   * 1.4 이하 Ant 태스크 : ''lombok.delombok.ant.DelombokTask''
   * 1.6 이상 Ant 태스크 : ''lombok.delombok.ant.Tasks$Delombok''   * 1.6 이상 Ant 태스크 : ''lombok.delombok.ant.Tasks$Delombok''
 +
 +==== Boolean 필드 문제 ====
 +  * [[https://www.baeldung.com/lombok-getter-boolean|Using Lombok's @Getter for Boolean Fields | Baeldung]]
 +  * ''boolean isRunning'' -> ''isRunning()'', ''setRunning()''
 +  * ''boolean running'' -> 위와 동일하게 ''isRunning()'', ''setRunning()''
 +  * 따라서 ''boolean isRunning''과 ''boolean running'' 이 둘 다 존재하면 컴파일 에러 발생.
 +  * ''Boolean running'' -> ''**get**Running()'', ''setRunning()''
  
 ===== Upgrade 주의점 ===== ===== Upgrade 주의점 =====
줄 102: 줄 110:
  
 <code java> <code java>
-@JsonProperty("xxx") +@JsonProperty("isXxx") 
-private int yyy;+private int isXxx;
  
 -> 진짜 생성은 -> 진짜 생성은
  
-@JsonProperty("xxx") +@JsonProperty("isXxx") 
-private int yyy;+private int isXxx;
  
-public void setYyy(int yyy) { +public void setXxx(int xxx) { 
-    this.yyy yyy;+    this.isXxx xxx;
 } }
  
--> 이로 인해서 JSON 에 XXXyyy 두개의 필드가 존재하게 됨.+-> 이로 인해서 JSON 에 ''isXxx''''xxx'' 두개의 필드가 존재하게 됨.
 </code> </code>
  
 === 신 버전 Lombok === === 신 버전 Lombok ===
 <code java> <code java>
-@JsonProperty("xxx") +@JsonProperty("isXxx") 
-private int yyy;+private int isXxx;
  
 -> 진짜 생성은 -> 진짜 생성은
  
-@JsonProperty("xxx") +@JsonProperty("isXxx") 
-private int yyy;+private int isXxx;
  
 // 아래 setter 에도 @JsonProperty 가 붙어버림 // 아래 setter 에도 @JsonProperty 가 붙어버림
-@JsonProperty("xxx") +@JsonProperty("isXxx") 
-public void setYyy(int yyy) { +public void setXxx(int isXxx) { 
-    this.yyy yyy;+    this.isXxx isXxx;
 } }
 </code> </code>
-  * 해결책은 getter/setter 자동생성을 막고, 명시적으로 getter/setter 를 생성하고 그 위에 ''@JsonProperty('yyy')'' 명시해서 추가해줌.+  * 해결책은 getter/setter 자동생성을 막고, 명시적으로 getter/setter 를 생성하고 그 위에 ''@JsonProperty('isXxx')'' 명시해서 추가해줌. 
 +  * 여기서 진짜 문제는 Jackson 이 ''isXxx'' 필드와 ''isXxx()'' 를 서로 다른 프라퍼티로 인식하는 것이다. 
 +  * Java Bean/Jackson 은 규약상 ''isXxx'' 필드의 getter/setter 는 ''isIsXxx()'', ''setIsXxx()'' 여야하는게 맞기 때문에, ''isXxx()'' 를 ''isXxx'' 필드와 다른 프라퍼티로 인식하는 것이다. 
 +  * 그런데 많은 사람들이 필드 이름을 지을 때 ''is로시작'' 하지만 프라퍼티 이름은 is를 빼고 만들고 싶어하는 경향이 있는데, 그게 Lombok 에 반영돼있어서 발생한 문제이다. 
 +  * 따라서 이 문제는 **is로 시작하는 boolean 필드** 에서만 발생한다. 
java/lombok.1612259723.txt.gz · 마지막으로 수정됨: 2021/02/02 18:55 저자 kwon37xi