본문으로 건너뛰기

2.4 Lombok(롬복)으로 생산성 높이기

Lombok(롬복) 은 자바 개발 시 반복적으로 작성해야 하는 코드(Boilerplate code)를 애너테이션을 통해 자동으로 생성해 주는 아주 유용한 라이브러리입니다. 스프링 부트 프로젝트에서 거의 필수적으로 사용됩니다.

1. 데이터 클래스의 변화 (Before vs After)​

Lombok을 사용하지 않으면 필드 하나를 추가할 때마다 Getter, Setter, 생성자, toString 등을 직접 작성해야 합니다.

Lombok 미사용 (Plain Java)​

public class User {
private Long id;
private String name;

public User(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
// ... toString, equals, hashCode 등 수십 줄의 코드 필요
}

Lombok 사용​

@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
}

2. 주요 및 심화 애너테이션 상세 설명​

1) @Getter / @Setter​

  • 필드에 대한 접근자(Getter)와 설정자(Setter)를 생성합니다.
  • 클래스 레벨에 붙이면 모든 필드에, 필드 레벨에 붙이면 특정 필드에만 생성됩니다.

2) 생성자 관련 애너테이션​

  • @NoArgsConstructor: 파라미터가 없는 기본 생성자를 생성합니다. (JPA 엔티티에서 필수)
  • @AllArgsConstructor: 모든 필드를 파라미터로 받는 생성자를 생성합니다.
  • @RequiredArgsConstructor: final이나 @NonNull이 붙은 필드만을 파라미터로 받는 생성자를 만듭니다. (생성자 주입 시 주로 사용)

3) @ToString & @EqualsAndHashCode​

  • @ToString: 객체의 내용을 문자열로 출력합니다. exclude 속성으로 특정 필드를 제외할 수 있습니다.
  • @EqualsAndHashCode: 객체의 동등성(Equality) 비교를 위한 메서드를 생성합니다.

4) @Data / @Value​

  • @Data: @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 모두 포함한 가변(Mutable) 데이터 객체용 세트입니다.
  • @Value: @Data의 불변(Immutable) 버전입니다. 클래스는 final이 되고 필드는 private final이 되며 Setter가 생성되지 않습니다.

5) @Builder (빌더 패턴)​

  • 복잡한 객체를 가독성 있게 생성할 수 있는 빌더 패턴 코드를 생성합니다.
User user = User.builder().id(1L).name("홍길동").build();

6) @NonNull​

  • 매개변수나 필드에 사용하여 null이 들어오면 NullPointerException을 던지는 검증 코드를 자동으로 삽입합니다.

7) @With (Wither)​

  • 불변 객체에서 특정 필드 하나만 바뀐 새로운 복사본 객체 를 만들 때 사용합니다. (user.withName("이순신"))

8) @UtilityClass​

  • 모든 메서드가 static인 유틸리티 클래스용입니다. 생성자를 private으로 만들고 클래스를 자동으로 final로 선언합니다.

9) @Cleanup​

  • InputStream이나 Connection 등 리소스 반환이 필요한 객체 앞에 사용하면, 스코프가 끝날 때 자동으로 close()를 호출해 줍니다. (try-with-resources와 유사)

10) @SneakyThrows​

  • 메서드 시그니처에 throws를 명시하지 않고도 체크드 예외(Checked Exception)를 던질 수 있게 가공해 줍니다.

11) @Slf4j / @Log​

  • 로그 기록을 위한 log 객체를 자동 생성합니다. 실무에서는 Slf4j 기반의 @Slf4j를 가장 많이 씁니다.

3. 작동 원리​

Lombok은 컴파일 시점에 자바 소스 코드를 분석하여 바이트코드(.class)에 해당 메서드들을 직접 삽입합니다. 따라서 실제 코드 창에는 보이지 않지만, 컴파일된 파일에는 완벽한 코드가 들어가게 됩니다.

4. 🎯 핵심 요점​

  • Lombok은 보일러플레이트 코드 를 줄여 가독성과 생산성을 높입니다.
  • @RequiredArgsConstructor 는 스프링의 생성자 주입과 찰떡궁합입니다.
  • 학습 초기에는 @Data를 쓰되, 점차 필수가 아닌 애너테이션은 배제하는 방향을 권장합니다.