기록이 힘이다.

과제) 자바의 Record를 공부하세요. 본문

JAVA

과제) 자바의 Record를 공부하세요.

dev22 2023. 3. 26. 12:05
728x90

 

 

[Java] 자바의 레코드(Record)

레코드란? ㆍ 불변(immutable) 데이터 객체를 쉽게 생성할 수 있도록 하는 새로운 유형의 클래스 ㆍ JDK14에서 preview로 등장하여 JDK16에서 정식 스펙으로 포함 기존의 불변 데이터 객체 public class Person

scshim.tistory.com

 

 

JEP 384: Records (Second Preview)

JEP 384: Records (Second Preview) AuthorBrian GoetzOwnerVicente Arturo Romero ZaldivarTypeFeatureScopeSEStatusClosed / DeliveredRelease15Componentspecification / languageDiscussionamber dash dev at openjdk dot java dot netEffortMDurationMRelates to

openjdk.org

<기존의 불변 데이터 객체>

class Point {
    private final int x;
    private final int y;

    Point(int x, int y) { 
        this.x = x;
        this.y = y;
    }

    int x() { return x; }
    int y() { return y; }

    public boolean equals(Object o) { 
        if (!(o instanceof Point)) return false;
        Point other = (Point) o;
        return other.x == x && other.y = y;
    }

    public int hashCode() {
        return Objects.hash(x, y);
    }

    public String toString() { 
        return String.format("Point[x=%d, y=%d]", x, y);
    }
}

 

레코드는 Java 언어의 새로운 종류의 클래스입니다. 레코드의 목적은 작은 변수 그룹이 새로운 종류의 엔터티로 간주된다는 것을 선언하는 것입니다. 레코드는 상태 (변수 그룹)를 선언하고 해당 상태와 일치하는 API에 커밋합니다. 즉, 레코드는 클래스가 일반적으로 누리는 자유(내부 표현에서 클래스의 API를 분리하는 기능)를 포기하지만 그 대가로 레코드가 훨씬 더 간결해집니다.

레코드 선언은 이름, 헤더 및 본문을 지정합니다. 헤더에는 상태를 구성하는 변수인 레코드의 구성 요소가 나열됩니다. (구성 요소 목록을 상태 설명 이라고도 합니다 .) 예를 들면 다음과 같습니다.

record Point(int x, int y) { }

레코드 선언에는 여러 가지 제한 사항이 있습니다.

  • 레코드는 암묵적으로 final 클래스(상속불가)이고, abstract 선언 불가
  • 다른 클래스를 상속(extends) 받을 수 없음, 인터페이스 구현(implements)은 가능