Lombok은 게터·세터·생성자·toString 같은 반복 코드를 어노테이션으로 대신 생성해 주는 자바 라이브러리다. 컴파일할 때 어노테이션 처리기(annotation processor)가 바이트코드(bytecode)에 메서드를 넣는다. 스프링과는 별개 라이브러리라 따로 추가한다.
자주 쓰는 어노테이션
@Getter,@Setter: 필드 접근자@NoArgsConstructor,@AllArgsConstructor: 기본 생성자, 전체 필드 생성자@RequiredArgsConstructor:final필드만 받는 생성자. 스프링의 생성자 주입과 짝이 잘 맞는다(의존성 주입 (DI))@ToString,@EqualsAndHashCode@Data:@Getter+@Setter+@ToString+@EqualsAndHashCode+@RequiredArgsConstructor@Builder: 빌더 API 생성(빌더 패턴)@Slf4j:private static final Logger log필드 생성(로그 레벨과 Logback)
@Service
@RequiredArgsConstructor
@Slf4j
public class OrderService {
private final OrderRepository orders; // 생성자 주입
private final PaymentClient payments;
}주의
- 엔티티에
@Data를 쓰지 않는다.toString·hashCode가 양방향 연관을 따라가 무한 순환하거나 지연 로딩을 건드리고, 변경되는 필드로hashCode를 만들면 컬렉션에서 엔티티를 잃는다. 엔티티는@Getter와 보호된 기본 생성자 정도만 둔다(JPA 연관관계 매핑) @Setter를 무분별하게 열면 어디서나 상태를 바꿀 수 있어 불변식(invariant)이 깨진다. 의도가 드러나는 메서드를 둔다(변수·컬렉션 캡슐화)- 자바 16 이후 단순 데이터 운반 객체(DTO, Data Transfer Object)는
record로 대부분 대체할 수 있다(2026 기준) - 생성된 코드가 보이지 않아 디버깅이 헷갈릴 수 있다. IDE 플러그인과 delombok으로 확인한다
반복 코드를 줄이는 도구지만, 줄인 대가로 숨은 동작이 생긴다는 점에서 누수 추상화의 법칙을 기억해 둔다.
출처: Project Lombok: @Data · 생성자 애너테이션 · 기능 목록