반응형
record란?
Java 14에서부터 도입된 새로운 클래스 유형으로, 주로 불변 데이터 객체를 만들 때 사용된다.
기존의 클래스를 간소화하여 데이터를 보다 쉽게 표현할 수 있도록 해주는 특별한 형태이다.
주로 값 객체(value object)로 사용되며, 데이터 중심의 객체를 선언할 때 코드의 양을 줄이고,
기본적인 메서드들(`equals()`, `hashCode()`, `toString()`)을 자동으로 제공하여 개발자가 작성해야 할 코드의 양을 줄여준다.
record 사용
record 선언
`record`는 클래스를 정의하는 것처럼 사용하는데, 이 때 `record`를 사용하여 선언한다.
public record Person(String name, int age) {
}
위 코드에서 `Person`은 `name`과 `age` 두개의 필드를 가지는 record 클래스이다.
참고로, `name`과 `age`는 `final`로 자동 선언되어 불변 속성을 가진다.
`record`는 `final` 클래스이므로 상속이 불가하다.
따라서, `Person` 객체는 한번 생성되면 그 필드 값을 변경할수 없다.
만약 Person 객체의 필드를 변경하려고 시도하면 컴파일 오류가 난다.
자동 제공 메서드
record 클래스는 자동으로 아래와 같은 메서드들을 제공한다.
- `equals()` : 두 객체 값이 동일한지 비교
- `hashCode()` : 객체의 해시코드 계산
- `toString()` : 객체의 문자열 표현 생성
- getter 메서드 : 필드에 접근하기 위한 메서드. `객체명.필드명`으로 구현되어 있다.
커스텀 생성자
기본적으로 record는 모든 필드를 받는 생성자를 자동으로 정의한다.
만약 일부만 받고싶거나 생성자를 커스텀 하고 싶다면 class 생성자를 커스텀하듯 하면 된다.
public record Person(String name, int age) {
public Person(String name) {
this(name, 0); // age는 기본값 0으로 설정
}
}
사용 예시
public class RecordExample {
public static void main(String[] args) {
// Record 객체 생성
Person person = new Person("Alice", 30);
// 자동 생성된 메서드 사용
System.out.println(person); // toString() 호출
System.out.println(person.name()); // getter로 직접 접근
System.out.println(person.age());
// 커스텀 메서드 호출
System.out.println(person.greet());
// equals() 사용
Person anotherPerson = new Person("Alice", 30);
System.out.println(person.equals(anotherPerson)); // true
}
}
<출력>
Person[name=Alice, age=30]
Alice
30
Hello, my name is Alice and I am 30 years old.
true
728x90
반응형
'Language > Java' 카테고리의 다른 글
직렬화(Serialization) (0) | 2024.12.12 |
---|---|
동기화(synchronization)와 락(Lock) (1) | 2024.12.11 |
Java의 스레드(Thread) (0) | 2024.12.10 |
Error & Exception (1) | 2024.12.09 |
가비지 컬렉션 (GC; Garbage Collection) (0) | 2024.12.08 |