참고
https://www.daleseo.com/lombok-popular-annotations/
그래들
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
노가다성 코드 생성을 줄여준다.
@Getter, @Setter | getter (boolean 타입의 경우 isXxx() ), setter 생성 |
@NoArgConstructor | 파라메터가 없는 기본 생성자 |
@AllArgsConstructor | 모든 필드값을 받는 생성자 |
@RequiredArgsConstructor | final이나 @NonNull인 필드 값만 받는 생성자 |
@ToString(exclude = "제외필드") | println(객체) |
@EqualsAndHasCode(callSuper = true) | equals, hadCode |
@Data | @Getter + @Setter + @RequriedArgsConstructor + @ToString + @EqualsAndHasCode |
@NotNull | Null값 허용불가 |
@Cleanup | 자동으로 Close() 메소드 호출 |
@Value | 불변(immutable) 클래스 생성 |
@Log, @Slf4j, @Log4j2 등 | log변수에 log객체 생성하여 할당하여 로거 사용 |
@Builder | 생성자에 빌더패턴사용 new ABC().setA(1).setB(2).build() 같은 체이닝 사용가능 |
@SneakyThrows | 예외발생시 Throwable 타입으로 반환 |
@Synchronized | 메소드에 동기화 설정 |
@Getter(lazy=true) | 동기화를 이용해서 최초 한번만 getter호출 |
@Entity
@Table(name = "member")
@ToString(exclude = "coupons")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EqualsAndHashCode(of = {"id", "email"})
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "email", nullable = false)
private String email;
@Column(name = "name", nullable = false)
private String name;
@CreationTimestamp
@Column(name = "create_at", nullable = false, updatable = false)
private LocalDateTime createAt;
@UpdateTimestamp
@Column(name = "update_at", nullable = false)
private LocalDateTime updateAt;
@OneToMany
@JoinColumn(name = "coupon_id")
private List<Coupon> coupons = new ArrayList<>();
@Builder
public Member(String email, String name) {
this.email = email;
this.name = name;
}
}