사용자 도구

사이트 도구


java:lombok

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
다음 판 양쪽 다음 판
java:lombok [2011/11/11 11:31]
kwon37xi [주의점]
java:lombok [2021/02/01 18:29]
kwon37xi [1.16.20]
줄 2: 줄 2:
   * http://projectlombok.org/   * http://projectlombok.org/
   * getter/setter/equals/hashCode 등을 어노테이션기반으로 자동으로 만들어준다.   * getter/setter/equals/hashCode 등을 어노테이션기반으로 자동으로 만들어준다.
 +  * [[java:lombok:pitfall|Lombok 사용상 주의점(Pitfall)]]
 +  * [[java:lombok:field_exist_verify|Lombok Field 지정이 올바른지 검사]]
 +  * [[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.javacodegeeks.com/2016/06/lombok-autovalue-immutables.html|Lombok, AutoValue, and Immutables]]
  
-===== Maven 설정 ===== +===== Gradle-Lombok ===== 
-  * http://projectlombok.org/mavenrepo/index.html 있는 대로 설정하면 된다. +  * [[https://projectlombok.org/setup/gradle|lombok setup gradle]] 
-  * Java 1.6 이상에서만 작동한다Java 코드가 1.6임을 명시하라.<code xml> +  * [[https://plugins.gradle.org/plugin/io.freefair.lombok|io.freefair.lombok gradle-lombok plugin]] 
-<build> +  * 혹은 다음과 같이 직접 설정<code
-  <plugins> +compileOnly 'org.projectlombok:lombok:1.18.12' 
-    <plugin> +annotationProcessor 'org.projectlombok:lombok:1.18.12'
-      <artifactId>maven-compiler-plugin</artifactId> +
-      <configuration+
-        <source>1.6</source> +
-        <target>1.6</target> +
-        <encoding>utf-8</encoding> +
-        <!-- <compilerArgument>-proc:none</compilerArgument> -proc:none 사용금지 --> +
-      </configuration> +
-    </plugin> +
-  </plugins> +
-</build>+
  
 +testCompileOnly 'org.projectlombok:lombok:1.18.12'
 +testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
 </code> </code>
 +
 +===== javac 메모리 문제 =====
 +  * [[http://notatube.blogspot.com/2010/11/project-lombok-trick-explained.html|Project Lombok - Trick Explained]]
 +  * **''-J-Xmx1024m''**
 +
 +===== Disable Field =====
 +  * '' AccessLevel.NONE'' 설정으로 특정 필드 등에 대한 자동 메소드 생성을 막을 수 있다.<code java>
 +// 모든 필드에 대해 Getter/Setter를 생성하지만 age 필드의 Setter는 생성하지 않는다.
 +@Data
 +public class Person {
 +    @Setter(AccessLevel.NONE)
 +    private int age;
 +}
 +</code>
 +
 +===== Maven 설정 =====
 +  * http://projectlombok.org/mavenrepo/index.html 있는 대로 설정하면 된다.
   * 만약 JPA Annotation Processor 때문에 maven-compiler-plugin 의** compilerArgument에 -proc:none을 지정했다면 삭제**하라.   * 만약 JPA Annotation Processor 때문에 maven-compiler-plugin 의** compilerArgument에 -proc:none을 지정했다면 삭제**하라.
  
줄 26: 줄 40:
   * 상호 참조하는 객체의 경우 toString() 호출시 Stack Overflow 가 발생할 수 있다. 한쪽 객체에서 다른 쪽 객체에 대해 ''@ToString(excluded={"propertyName"})'' 형태로 출력시 제외토록 만들어야 한다.   * 상호 참조하는 객체의 경우 toString() 호출시 Stack Overflow 가 발생할 수 있다. 한쪽 객체에서 다른 쪽 객체에 대해 ''@ToString(excluded={"propertyName"})'' 형태로 출력시 제외토록 만들어야 한다.
   * ''@EqualsAndHashCode(of = {})''로 꼭 필요한 필드만 비교하도록 처리한다.   * ''@EqualsAndHashCode(of = {})''로 꼭 필요한 필드만 비교하도록 처리한다.
 +
 +===== PMD 문제 회피 =====
 +  * Lombok으로 Getter/Setter를 만들면 [[java:pmd|PMD]]에서 ''Unused private field''로 표시가 된다.<code java>
 +@Data
 +@SuppressWarnings("PMD.UnusedPrivateField")
 +public class LombokUseClass {
 +}
 +</code>
 +  * ''Signualr Field''로 표시될 때는<code java>
 +@Data
 +@SuppressWarnings("PMD.SingularField")
 +public class LombokUsedClass {
 +    private String field;
 +}
 +</code>
 +
 +===== Checkstyle 문제 회피 =====
 +  * HideUtilityClassConstructor <code java>
 +@SuppressWarnings("checkstyle:HideUtilityClassConstructor")
 +</code>
 +
 +===== equals & hashCode Code Coverage =====
 +  * [[java:equals_verifier|Equals Verifier]]
 +  * 다른 클래스를 상속할 때, 부모 클래스의 ''equals&hashCode''를 그대로 사용하고자 하는 상황에서 [[java:findbugs|Java FindBugs]]의 경고를 회피하려면 자식 클래스 쪽에 다음과 같이 설정한다.<code java>
 +@EqualsAndHashCode(callSuper = true, of = {})
 +</code>
 +    * 여기서 ''of = { }''를 넣지 않으면, 자식 클래스의 모든 필드가 비교 대상으로 들어가 버리게 된다.
 +
 +===== Custom Handler =====
 +  *[[http://peichhorn.github.io/lombok-pg/|Lombok PG]] Custom handler 모음
 +  * [[http://notatube.blogspot.kr/2010/12/project-lombok-creating-custom.html|Project Lombok: Creating Custom Transformations]] 프로젝트 구성에 대해 잘 설명함
 +  * [[https://stackoverflow.com/questions/41243018/create-custom-annotation-for-lombok|java - Create custom annotation for Lombok]]
 +  * [[https://binkley.blogspot.kr/2014/12/writing-your-own-lombok-annotation.html|binkley's BLOG: Writing your own lombok annotation]]
 +
 +===== Default Value Builder & ETC=====
 +  * [[https://www.baeldung.com/lombok-builder-default-value|Lombok Builder with Default Value | Baeldung]] Builder 생성시 기본값 지정하는 방법
 +  * [[https://www.baeldung.com/lombok-builder-custom-setter|Lombok Builder with Custom Setter | Baeldung]]
 +
 +===== Delombok =====
 +  * 1.4 이하 Ant 태스크 : ''lombok.delombok.ant.DelombokTask''
 +  * 1.6 이상 Ant 태스크 : ''lombok.delombok.ant.Tasks$Delombok''
 +
 +===== Upgrade 주의점 =====
 +  * [[https://projectlombok.org/changelog|lombok changelog]]
 +
 +==== 1.16.20 ====
 +  * 이 시점 이후부터 ''@AllArgsConstructor'', ''@RequiredArgsConstructor'' 등에서 자동으로 생성해주던 ''@ConstructorProperties(필드정보)'' 가 자동으로 생성이 안되게 바뀐다.
 +  * [[https://docs.oracle.com/javase/7/docs/api/java/beans/ConstructorProperties.html|@ConstructorProperties]]
 +  * 기본 생성자가 없을 경우, [[java:jackson|Java Jackson JSON Library]] 등이 
 +  * ''lombok.config''에서 ''lombok.anyConstructor.addConstructorProperties=true''를 명시적으로 주면 자동 생성된다.
 +
 +
java/lombok.txt · 마지막으로 수정됨: 2022/06/23 11:10 저자 kwon37xi