불변(immutable) 데이터 객체를 쉽게 생설할 수 있도록 하는 새로운 유형의 클래스
JDK 14에서 등장, 16에서 정식 스펙으로 포함.
객체 지향에서 불변 객체란 생성 후 그 상태 바꿀 수 없는 객체 말함.
재할당 가능하지만, 한번 할당하면 내부 데이터 변경 불가능한 객체.
String, Integer, Boolean 등.
String str = "aa" , str = "bb" 는 값 변경아니야? -> "bb"라는 새로운 객체 만들고 그 객체를 str이 참조하게 하는 것.
class MutablePerson {
public String name;
public int age;
public MutablePerson(String name, int age) {
this.name = name;
this.age = age;
}
}
class ImmutablePerson {
public final String name;
public final int age;
public ImmutablePerson(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
상태(age, name)를 보유하는 객체 생성 위해 많은 코드 필요함.
public record Person(String name, int age) {}
레코드 클래스 사용하면 훨씬 간결하게 불변 데이터 객체 정의 가능!
컴파일러는 헤더 통해 내부 필드 추론.
생성자 작성 필요 없고 toString, equals, hasCode 메소드에 대한 구현 자동 제공.
// 사용 예시
public class RecordDemo {
public static void main(String[] args){
Person person = new Person("Ted", 100);
System.out.println("이름:"+ person.name() + " 나이:"+person.age());
System.out.println("객체 정보:"+person.toString());
Person person2 = new Person("Ted", 100);
Person person3 = new Person("Dean", 200);
if (person.equals(person2))
System.out.println("person, person2는 같은 사람");
else
System.out.println("person, person2는 다른 사람");
if (person.equals(person3))
System.out.println("person, person3는 같은 사람");
else
System.out.println("person, person3는 다른 사람");
}
}
<참고>