반응형
소개
Java에서 불변 객체(immutable object) 를 만들 때 흔히 사용하는 두 가지 방식이 있습니다.
바로 Record와 Lombok입니다.
둘 다 getter, toString, equals, hashCode, 생성자 등을 자동으로 생성해주지만 철학과 구현 방식, 사용 목적은 분명히 다릅니다.
이번 글에서는 Record와 Lombok의 차이를 명확히 정리하고, 실무에서 언제 어떤 것을 선택하면 좋은지에 대해 알아보겠습니다.
1. Java Record란?
record는 Java 14에 미리보기 기능으로 도입되었고,
Java 16부터 정식으로 지원되는 불변 데이터 클래스를 위한 문법입니다.
public record User(String name, int age) {}
위 한 줄로 다음과 같은 클래스를 생성할 수 있습니다:
- 모든 필드를 파라미터로 받는 생성자
final필드 + gettertoString,equals,hashCode자동 생성- 컴파일 시점에 생성, 별도 의존성 없음
Record는 기본적으로 불변 객체이며, 상속이 불가능한 final 클래스입니다.
2. Lombok이란?
Lombok은 애너테이션을 사용하여 Java 코드의 반복적인 부분을 자동화하는 라이브러리입니다.
예를 들어 다음과 같이 작성할 수 있습니다:
@Getter
@AllArgsConstructor
@ToString
public class User {
private final String name;
private final int age;
}
@Getter: getter 자동 생성@ToString,@EqualsAndHashCode: 자동 오버라이딩@Builder,@Data,@Value등 다양한 조합 가능
단점은 외부 라이브러리에 의존해야 하며,
IDE나 빌드 툴의 설정에 따라 인식 오류가 발생할 수 있다는 점입니다.
3. 기능 비교
| 항목 | Record | Lombok |
|---|---|---|
| 목적 | 불변 데이터 객체 전용 | 코드 간소화 도구 |
| Java 버전 | Java 16 이상 필요 | Java 8 이상에서 사용 가능 |
| 의존성 | 없음 | 별도 라이브러리 필요 (lombok.jar) |
| 상속 | 불가 (final) |
클래스 상속 가능 |
| 필드 수정 | 모든 필드 final |
final 또는 일반 필드 선택 가능 |
| 생성자 제어 | 불가 (자동 생성된 것만 사용) | 직접 생성자 작성 또는 @Builder 활용 가능 |
| IDE 호환성 | 우수 | 종종 문제 발생 (특히 Eclipse) |
4. 언제 Record를 쓰면 좋을까?
- 단순한 DTO, 응답 객체, 불변 모델 등
- 순수하게 데이터를 전달하기 위한 목적
- Java 16 이상을 사용하는 프로젝트
- 별도의 setter, 커스텀 생성자, 상속이 필요 없는 경우
예시: API 응답용 DTO
public record MemberResponse(String name, int level) {}
5. 언제 Lombok을 쓰면 좋을까?
- 다양한 생성자, builder 패턴, 유연한 클래스 설계가 필요한 경우
- Java 8~11을 사용하는 프로젝트
- 기존 레거시 코드에 점진적으로 적용할 때
- 테스트 객체, Entity 등에서 커스터마이징이 필요한 경우
예시: 복잡한 모델과 빌더
@Builder
@Getter
@AllArgsConstructor
public class Order {
private final Long id;
private final String productName;
private final int quantity;
}
마무리
Record와 Lombok은 둘 다 불필요한 보일러플레이트 코드를 줄여주는 도구입니다.
Record는 불변 객체를 위한 공식 문법이며,
Lombok은 더 다양한 설계를 허용하는 코드 자동화 도구입니다.
| 상황 | 추천 방식 |
|---|---|
| 간단한 불변 DTO | Record |
| Builder 패턴 필요 | Lombok |
| Java 16 이상 | Record 추천 |
| Java 8~11 | Lombok 유지 |
두 도구의 차이를 이해하고, 상황에 맞게 적절히 선택하는 것이 실무에서 가장 중요합니다.
반응형
'IT > Java' 카테고리의 다른 글
| [Java] Enum을 JSON으로 직렬화할 때 주의할 점 – @JsonValue, @JsonCreator 활용법 (0) | 2025.06.01 |
|---|---|
| [Java] Enum을 똑똑하게 사용하는 실무 패턴 정리 (1) | 2025.05.25 |
| [Java] Optional이란?? (0) | 2025.05.23 |
| [Java] List Grouping 하는 방법 (0) | 2025.02.10 |
| Error와 Exception (0) | 2021.04.08 |
댓글