7월 11일 - Record

Yullgiii·2024년 7월 11일
0

Java 14에서 도입된 Record

Java 14에서 프리뷰로 도입된 Record는 순수히 데이터를 보유하기 위한 클래스 타입이다. Java 16부터는 정식 스펙으로 포함되었으며, Record는 class처럼 타입으로 사용이 가능하다.

기존의 데이터 클래스

객체를 생성할 때 보통 아래와 같이 개발자가 직접 클래스를 만들어야 한다.

public class Product {
    private final String name;
    private final double price;

    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Product product = (Product) o;
        return Double.compare(product.price, price) == 0 && Objects.equals(name, product.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, price);
    }

    @Override
    public String toString() {
        return "Product{name='" + name + "', price=" + price + '}';
    }
}

클래스 Product를 만들기 위해 다음 작업이 필요하다:

필드 nameprice를 생성한다.
생성자를 만든다.
getter를 구현한다.
equals, hashCode, toString 메서드를 구현한다.
이 형식은 보통 EntityDTO 구현에 많이 사용된다.

Record를 사용한 데이터 클래스

이를 Record 타입의 클래스로 만들면 상당히 단순해진다.

public record Product(String name, double price) {}

자동으로 필드를 private final로 선언하고, 생성자와 getter까지 암묵적으로 생성된다. 또한 equals, hashCode, toString도 자동으로 생성된다.

대신 getter 메소드의 경우 일반적으로 getXXX() 형식으로 명칭을 짓지만, Record에서는 name(), price()와 같이 필드명으로 생성된다.

예제 코드

다음은 Record를 사용한 예제 코드이다.

public record Vehicle(String model, int year) {}

public class Main {
    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle("Tesla Model 3", 2021);

        // 자동 생성된 메서드 사용
        System.out.println(vehicle.model()); // 출력: Tesla Model 3
        System.out.println(vehicle.year());  // 출력: 2021

        // toString 메서드 출력
        System.out.println(vehicle);  // 출력: Vehicle[model=Tesla Model 3, year=2021]

        // equals와 hashCode 메서드 사용
        Vehicle anotherVehicle = new Vehicle("Tesla Model 3", 2021);
        System.out.println(vehicle.equals(anotherVehicle));  // 출력: true
        System.out.println(vehicle.hashCode() == anotherVehicle.hashCode());  // 출력: true
    }
}

So...

Java의 Record는 데이터를 간단하게 보유하고 관리할 수 있는 새로운 클래스 타입으로, 개발자가 일일이 구현해야 했던 생성자, getter, equals, hashCode, toString 메서드를 자동으로 생성해준다. 이를 통해 코드를 더욱 간결하고 효율적으로 작성할 수 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글