기존에는 getter/setter, toString(), equals(), hashCode()를 직접 구현
record를 사용하면 자동으로 필드, 생성자, toString(), equals(), hashCode()가 생성됨
DTO, VO 같은 불변 객체(Immutable Object) 생성이 간단해짐
자동으로 getter, equals(), hashCode(), toString()을 제공
코드가 훨씬 간결해짐
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String name() { return name; }
public int age() { return age; }
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + "}";
}
@Override
public boolean equals(Object o) { /* equals 구현 */ }
@Override
public int hashCode() { /* hashCode 구현 */ }
}
record User(String name, int age) {}
instanceof 패턴 매칭
기존에는 instanceof 체크 후, 형변환을 따로 필요하였지만
17부터는 instanceof 사용 시, 형변환을 한 번에 처리 가능
중복되는 (String) obj 형변환 코드가 필요 없음
코드 가독성이 좋아짐
if (obj instanceof String) {
String s = (String) obj; // 형변환 필요
System.out.println(s.length());
}
if (obj instanceof String s) { // 변수 s에 자동 할당
System.out.println(s.length());
}