Lombok: 코드 다이어트 라이브러리

2020. 8. 10. 15:45Java/Java

▶ Lombok

Java에서 Model(DTO, VO, Domain)을 만들 때 field에 대한 toString(), Getter()/Setter(), 생성자 등 반복적으로 만드는 코드를 어노테이션을 통해 줄여주는 라이브러리.

 

 

▶ Annotation

 

@ToString

  : 모든 필드를 출력하는 toString() 생성.

    exclude 속성을 통해 특정 field를 toString() 결과에서 제외시킬 수도 있음.

@ToString(exclude = "password")
public class User {
  private String id;
  private String name;
  private String password;
}

  출력 시 클래스명(필드명1=필드값1, 필드명2=필드값2...)와 같은 형식으로 출력됨.

 

@Getter

  : 모든 field에 getter() 생성.

 

@Setter

  : final로 선언되지 않은 모든 field에 setter() 생성.

 

@EqualsAndHashCode

  : equals()와 hascode() 생성

   callSuper 속성을 통해 equals()와 hashCode() 자동 생성 시 부모 클래스의 필드까지 감안할지 감안하지 않을지 설정할 수 있음.

@EqualsAndHashCode(callSuper = true)
public class User extends Domain {
  private String name;
  private String password;
}

  "callSuper = true" 설정 시 부모 클래스의 필드 값들도 동일한지 체크하며, "callSuper = false"로 설정(기본값) 시에는 현재 클래스의 필드 값들만 고려함.

 

@Data

  : @ToString, @Getter, @Setter, @EqualsAndHashCode, @RequiredArgsConstructor을 한꺼번에 설정.

 

@NoArgsConstructor / @RequriedArgsConstructor / @AllArgsConstructor

- @NoArgsConstructor 
 : parameter가 없는 기본 생성자를 생성.
- @AllArgsConstructor 
 :모든 필드 값을 파라미터로 받는 생성자를 생성. 
- @RequiredArgsConstructor
 : 초기화되지 않은 final field와 @NonNull이 붙은 field값만 파라미터로 받는 생성자를 생성.

@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class User {
  private String id;
  @NonNull
  private String name;
  @NonNull
  private String password;
  private int[] scores;
}


User userA = new User();
User userB = new User("developer", "barva", "1234", null);
User userC = new User("barva", "1234");

 

@NonNull

: null 체크 지원. @NonNull이 붙은 field에 null이 들어온 경우 NullPointerException 발생.

 

 

 

 

 

참고 자료

goddaehee.tistory.com/95

projectlombok.org/features/all

www.daleseo.com/lombok-popular-annotations/

medium.com/webeveloper/requiredargsconstructor-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85-dependency-injection-4f1b0ac33561

'Java > Java' 카테고리의 다른 글

[Java] byte 배열을 물리적인 파일로 변환  (0) 2020.09.02