반응형
소개
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 |
댓글