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
를 만들기 위해 다음 작업이 필요하다:
필드 name
과 price
를 생성한다.
생성자를 만든다.
getter
를 구현한다.
equals
, hashCode
, toString
메서드를 구현한다.
이 형식은 보통 Entity
나 DTO
구현에 많이 사용된다.
이를 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
}
}
Java의 Record는 데이터를 간단하게 보유하고 관리할 수 있는 새로운 클래스 타입으로, 개발자가 일일이 구현해야 했던 생성자, getter
, equals
, hashCode
, toString
메서드를 자동으로 생성해준다. 이를 통해 코드를 더욱 간결하고 효율적으로 작성할 수 있다.