자주쓰는 Lombok

반영환·2023년 5월 24일
0

스프링 이모저모

목록 보기
1/12
post-thumbnail

@Getter / @Setter

xxx라는 필드에 선언하면 자동으로

  • getXxx()(boolean 타입인 경우, isXxx()) 생성
  • setXxx() 생성
@Getter @Setter
private String name;

...

user.setName("홍길동");
String userName = user.getName();

또한, 필드 레벨이 아닌 클래스 레벨에 @Getter 또는 @Setter를 선언해줄 경우, 모든 필드에 접근자와 설정자가 자동으로 생성

@xxxArgsConstructor

@NoArgsConstructor

파라미터가 없는 기본 생성자 생성

@AllArgsConstructor

모든 필드 값을 파라미터로 받는 생성자 생성

@RequiredArgsConstructor

final이나 @NonNull인 필드 값만 파라미터로 받는 생성자 생성

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

access

생성자 접근 Level를 설정할 수 있다.

xxxArgsConstructor(access = AccessLevel.PROTECTED)

Entity Class에는 AccessLevel.PROTECTED만 사용하자

왜? Entity 들은 Mapping 관계에 있을 때 ( N:1 ,N:M 등등 ) HibernateProxy를 사용 해서 영속성 컨텍스트에 값이 있는지 확인 후 성능 향상을 위해 조회하기 때문에 만일 Foreign Entity 조회시 Target Entity의 접근 권한이 PRIVATE인 경우 Proxy 객체를 생성하는 과정에서 에러가 발생하게 된다.

HHH000143: Bytecode enhancement failed because no public, protected or package-private default constructor was found for entity: com.jpastudy.ms.domain.Entity.StoreEntity. Private constructors don't work with runtime proxies!

@ToString

@ToString(exclude = "password") // to string 출력시 제외
public class User {
  private Long id;
  private String username;
  private String password;
  private int[] scores;
}

@EqualsAndHashCode

// 부모 클래스 필드 값들도 동일한지 체크
// default : false
@EqualsAndHashCode(callSuper = true) 
public class User extends Domain {
  private String username;
  private String password;
}

@Data

@Data는

  • @Getter
  • @Setter
  • @RequiredArgsConstructor
  • @ToString
  • @EqualsAndHashCode

한 번에 설정

@Data
public class User {
  // ...
}

필요한 어노테이션만 쓰자! 비추

profile
최고의 오늘을 꿈꾸는 개발자

0개의 댓글