잘 사용할 수 있다면 확실히 코드가 깔끔해지고, 편리하게 사용 가능할 것 같아 보입니다.
그럼 Record 클래스를 이해하기 쉽게 코드를 통해 알아봅시다.
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 getName() {
return name;
}
public int getAge() {
return age;
}
}
위와 같이 User라는 객체가 있고, 이를 나타내는 변수로 name, age가 있다고 해보자.
이 코드를 record로 한번 바꿔보면 다음과 같다.
public record User(String name, int age) {
}
놀랍게도 이렇게 간단히 구현이 완료된다.
심지어 equals, hashcode, toString을 자동으로 생성해주기 때문에 더 많은 기능을 제공해준다고 말할 수 있다.
레코드 클래스의 구조는 위에 코드를 통해 알 수 있듯이,
class
대신 record
라 선언하고 레코드명(헤더) {바디}
구조를 이루고 있다.
이렇게 축약할 수 있는 이유는 컴파일러가 헤더를 통해 내부 필드를 추론하기 때문인데, 추론한 내부 필드를 통해 자동으로 equals, hashCode, toString, getter 메서드를 생성해주는 것이다.
여기서 한가지 주의할 점이 있는데, getter 메서드는 필드명을 통해 사용한다.
// 일반적인 getter 메서드
String name = user.getName();
// Record 클래스에서는 필드명으로 접근
String name = user.name();
이러한 레코드의 특징으로는,
아직 많이 사용해보진 않았지만 Record 클래스에 익숙해져서 잘 사용해지길 바라며 여기서 글을 마무리하겠습니다.