본문 바로가기

카테고리 없음

record 클래스

1. record란?

  • 자바 14부터 도입된 불변(immutable) 데이터 클래스
  • DTO, VO, Response 등 값을 담는 용도에 적합
  • getter, toString(), equals(), hashCode() 등 자동 생성
public record Person(String name, int age) {}

자동으로 아래 코드가 생성된다:

public final class Person {
    private final String name;
    private final int age;

    public Person(String name, int age) { ... }

    public String name() { return name; }
    public int age() { return age; }

    public String toString() { ... }
    public boolean equals(Object o) { ... }
    public int hashCode() { ... }
}

2. record의 특징

항목 설명

불변성 모든 필드는 private final, 수정 불가
상속 클래스 상속 불가 (final), 인터페이스만 구현 가능
생성자 주 생성자 하나, 커스텀 생성자도 정의 가능
메서드 메서드 오버라이드 가능 (ex: toString)

 3. enum처럼 사용할 수 있다?

public record SaleType(String code, String label) {
    public static final SaleType 일반 = new SaleType("A001", "일반");
    public static final SaleType 제휴 = new SaleType("A002", "제휴");
}
  • enum처럼 public static final 인스턴스로 고정된 목록을 제공
  • 단, enum처럼 switch문이나 타입 제한 기능은 없음
  • 대신 값 + 설명이 필요한 상황엔 더 유연하게 활용 가능

 4. enum과의 차이점

구분 enum record + static final

용도 고정된 종류 (상태, 타입 등) 코드-명칭 매핑, 값 객체 표현
개수 제한 선언된 항목만 가능 제한 없음
비교 방식 == 비교 가능 equals() 비교 필요
DB 매핑 제약 있음 (String/Ordinal) 자유롭게 가능
switch 사용 가능 불가능
유연성 제한적 유연함

 5. 언제 record를 써야 할까?

✔ DTO / 응답객체 / 코드값 매핑 등 불변 데이터 구조가 필요할 때
✔ enum처럼 쓰되, 설명 필드가 추가로 필요할 때
✔ 여러 상수 값들을 객체처럼 그룹화 하고 싶을 때


요약

🔹 enum은 타입 제한이 필요할 때,
🔹 record는 유연한 불변 데이터 표현이 필요할 때 사용하자.