본문으로 건너뛰기
Advertisement

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를 쓰되, 점차 필수가 아닌 애너테이션은 배제하는 방향을 권장합니다.
Advertisement