개발새발/대용량트래픽(Webflux,Redis,React)

250110_01.Record의 주요 특징

막동이아빠 2025. 2. 2. 00:35

스터디에서 정리해주신 내용을 (거의)그대로 옮겨적은 내용입니다.

 

=========================================================

 

Java17에서 도입된 'record'는 데이터 클래스를 간결하고 효율적으로 정의하기 위한 새로운 기능

불변성을 기본적으로 지원하며, 가독성과 유지보수성을 크게 향상 시킴

 

Record의 주요 특징

 

1. 간결한 문법

 - record 키워드를 사용하여 데이터 클래스를 간단히 정의할 수 있음

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

 - 자동으로 생성자, getter, equals, hashCode, toString 메서드 제공

 

2. 불변성(Immutability)

 - 모든 필드는 final로 선언되어, 생성 이후 값 변경 불가

 - 멀티스레드 환경에서 안전하게 사용 가능

 

3. 자동 생성 메서드

 - 컴파일러가 다음 메서드들을 자동으로 생성

  - equals(Object o)

  - hashCode()

  - toString()

Person person = new Person("Kim", 33);

System.out.println(person); // 출력: Person[name=Kim age=33]

 

4. 클래스 상속 불가

 - Record는 암묵적으로 final로 선언되어 상속 불가

 - 인터페이스 구현은 가능

 

5. 사용 용도

 - 데이터 전송 객체(DTO), 값 객체(Value Object)등 데이터를 담는 용도로 적합

 

 

Record와 기존 방식 비교

특징 기존 클래스 Record
코드 길이 생성자, getter, equals, hashCode, toString 메서드 작성 필요 자동 생성
불변성 지원 직접 final 선언 및 불변성을 보장하는 코드 작성 필요 기본적으로 불변성 제공
상속 가능 여부 클래스 상속 가능 상속 불가
외부 라이브러리 의존성 Lombok 등 라이브러리 필요 필요 없음

 

 

Record 사용 예제

 

1. 기본 사용

public record Student(String name, int age) {}

public class Main {
    public static void main(String[] args) {
        Strudent student = new Student("Alice", 20);
        System.out.println(student.name()); // Kim
        System.out.println(student.age());  // 33
        System.out.println(student);        // Student[name=Kim, age=33]
    }
}

 

2. 커스텀 생성자 정의

public record Student(String name, int age) {
    public Student {
        if(age < 0) {
            throw new IllegalArgumentException("Age cannot be negative");
        }
    }
}

 

3. 인터페이스 구현

public record Employee(String name, int id) implements Comparable<Employee> {
    @Override
    public int compareTo(Employee other){
        return Integer.compare(this.id, other.id);
    }
}

 

 

Lombok과 Record 비교

 - Lombok은 외부 라이브러리로 추가 설정 및 IDE 플러그인이 필요, Record는 Java 표준 기능으로 별도 설정이 필요없음.

 - Lombok은 가변 객체를 포함한 다양한 옵션 제공, Record는 간결하며 불변성 기본 제공