Java의 레코드 클래스(Record Class)는 데이터를 저장하고 전달하는 목적으로 사용되는 간결한 구조의 클래스입니다. Java 14에서 처음 도입되었고, Java 16에서 정식으로 추가되었습니다. 레코드는 기본적으로 불변성을 가지며, 주로 DTO와 같이 데이터 전달용 객체를 간단하게 정의할 때 유용합니다.
public record RaceRequest(String command, int iterations, RacingCarList racingCarList)
는 Java 레코드 선언입니다. 레코드는 주어진 필드(command
, iterations
, racingCarList
)를 기반으로 기본 생성자와 getter 메서드를 자동 생성합니다.
java
코드 복사
public RaceRequest(String command, Integer iterations) {
this(command, iterations, new RacingCarList());
}
위 부분은 생성자 오버로딩을 사용하여 racingCarList
없이 command
와 iterations
만으로 RaceRequest
객체를 생성할 수 있도록 해줍니다. this(command, iterations, new RacingCarList());
로 기본값을 new RacingCarList()
로 설정하여 racingCarList
필드에 초기값을 전달합니다.
java
코드 복사
public RaceRequest withCarList(RacingCarList racingCarList) {
return new RaceRequest(this.command, this.iterations, racingCarList);
}
이 부분은 복사 메서드 패턴입니다. 레코드는 불변이기 때문에 필드 값을 변경할 수 없습니다. 따라서 기존 객체의 필드는 그대로 유지하면서 racingCarList
필드만 변경된 새로운 RaceRequest
객체를 생성합니다.
RaceRequest
객체를 생성할 때 필요한 필드를 기본 생성자로 지정합니다.withCarList
메서드를 통해 일부 필드를 변경하면서 새로운 객체를 생성할 수 있도록 합니다.equals
, hashCode
, toString
도 자동 생성되기 때문에 별도로 정의할 필요가 없습니다.final
로 선언한 것과 동일하게 동작하며, 값을 변경할 수 없습니다.