장점

  • 어노테이션을 기반으로 코드를 자동생성하여 생산성 향상

어노테이션

@Getter, @Setter

  • getter/setter 메서드 생성
  • @Setter의 경우 Entity에서는 사용을 지양해야 한다
    • Setter를 통해 엔티티의 데이터를 변경하면 변경 포인트가 많아져 유지보수 하기가 힘들어진다
    • 변경 메서드를 만들어 데이터를 변경해 주는 것이 좋다

@NonNull

  • 해당 변수가 null로 넘어오면 NullPointException을 발생시킨다
  • 롬복 대신 Spring의 @NonNull을 사용하자

@NoArgsConstructor

  • 기본 생성자를 생성
  • access 속성 : 접근제어자 변경
    • JPA 엔티티의 경우 기본생성자를 통해 무분별한 엔티티 객체의 생성을 막기 위해 AccessLevel.PROTECTED를 사용한다

@RequiredArgsConstructor

  • final 이나 @NotNull이 붙은 필드만 사용하는 생성자 생성

@AllArgsConstructor

  • 모든 필드를 사용하는 생성자를 생성

@Builder

  • 빌더를 생성
  • 어떤 생성자도 존재하지 않으면 default 접근제어자의 AllArgsConstructor를 자동으로 생성한다
  • toBuilder 속성 : 객체의 일부 값만 변경된 객체를 생성
UserVO u = User.builder()
          .id(1L)
          .name("europani")
          .build();

UserVO u2 = u.toBuilder().name("europani2").build(); 

@Builder.Default

  • 필드의 기본 값을 설정할 때 사용

@Singular

  • 컬렉션 필드에 데이터를 추가할 때 하나씩 추가 할 수 있도록 설정
@Singular
private List<String> hobby;

UserVO.builder()
    .hobby("reading")
    .hobby("coding")
    .build();

@ToString

  • 필드를 기반으로 toString() 메서드를 자동으로 완성
  • exclude 속성 : 제외시킬 필드 선택
    • JPA를 사용할 때 양방향 연관관계를 갖는 엔티티에서 해당 엔티티를 제외하지 않으면 순환참조가 발생한다
    • 반드시 연관관계를 갖는 엔티티를 제외해야 한다

@Value

  • @Getter + private final field + @AllArgsConstructor + @ToString + @EqualsAndHashCode 모두 사용
  • @Data의 immutable 버전

@Data (사용X)

  • @Getter + @Setter + @RequiredArgsConstructor + @ToString + @EqualsAndHashCode 모두 사용
  • 필요한 어노테이션만 선택해서 사용하는 것이 좋다