자바의 record란?

한주영·2025년 11월 6일

java

목록 보기
2/2

자바의 record

JAVA 14에서 처음 도입된 데이터 전용 클래스

불변 데이터 객체를 간결하게 정의할수있도록 만들어짐

기존의 클래스서는 필드,생성자,getter,equals,hashCode,toString등 을직접 작성해야했음

Person클래스

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

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

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

    @Override
    public String toString() {
        return "Person[name=" + name + ", age=" + age + "]";
    }
}

해당 클래스에서 record를 사용하면 아래처럼 한줄로 같은기능구현가능
public record Person(String name, int age) {}

특징
| 항목 | 설명 |
| -------------------------- | ----------------------------------------------------- |
| 불변성 (Immutable) | 모든 필드는 final이며, 객체 생성 후 변경 불가 |
| 자동 생성 메서드 | equals(), hashCode(), toString() 자동 생성 |
| 생성자 자동 생성 | 컴파일러가 주 생성자(canonical constructor) 자동 생성 |
| Compact Constructor 지원 | 유효성 검사 등을 위해 생성자 직접 정의 가능 |
| 인터페이스 구현 가능 | implements 가능하지만 extends는 불가 (final 클래스이므로 상속 불가) |

예시코드

public record Student(String name, int score) {

    // compact constructor (필드 유효성 검사 등 가능)
    public Student {
        if (score < 0 || score > 100) {
            throw new IllegalArgumentException("점수는 0~100 사이여야 합니다.");
        }
    }

    // 메서드 추가도 가능
    public String grade() {
        if (score >= 90) return "A";
        else if (score >= 80) return "B";
        else if (score >= 70) return "C";
        else return "F";
    }

    // 인터페이스 구현도 가능
    // public record Student(String name, int score) implements Comparable<Student> {...}
}

class Main {
    public static void main(String[] args) {
        Student s1 = new Student("한주영", 95);
        System.out.println(s1);             // Student[name=한주영, score=95]
        System.out.println(s1.name());      // 한주영
        System.out.println(s1.score());     // 95
        System.out.println(s1.grade());     // A
    }
}

```java

## 🧠 4. record를 쓰면 좋은 경우

✅ DTO(Data Transfer Object)
✅ API 응답 객체
✅ 단순 데이터 묶음 (ex. Pair, Coordinate, Point)
profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글