2023.11.21 Record Class

손창현·2023년 11월 20일
0

TIL

목록 보기
10/15

Record 클래스는 JDK 14부터 나온 필드의 타입과 이름만 필요한 불변 데이터 클래스이다.

어디에, 왜 Record Class를 사용할까?

아래 코드를 살펴보자.

public class Person {

    private final String name;
    private final String address;

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, address);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        } else if (!(obj instanceof Person)) {
            return false;
        } else {
            Person other = (Person) obj;
            return Objects.equals(name, other.name)
                    && Objects.equals(address, other.address);
        }
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", address=" + address + "]";
    }
}

위 Person 클래스는 한번 생성이 되면 변경할 수 없는 불변 클래스이다. Person 클래스를 불변 클래스 로 사용하기 위해 작성한 코드들은 다음과 같다.

  1. 각 필드에 priavate, final 키워드
  2. 각 필드에 대한 getter 메서드
  3. 각 필드가 담긴 public 생성자
  4. 모든 필드가 일치할 때 동일한 클래스의 객체에 대해 true를 반환하는 equals메서드
  5. 모든 필드가 일치할 때 동일한 값을 반환하는 hashCode메서드
  6. 클래스 이름, 각 필드 이름 및 해당 값을 포함하는 toString *메소드*

이러한 불변 클래스를 매번 생성하는데 생기는 두 가지 문제점이 있다.

  1. 계속해서 반복되는 코드가 존재한다.
  2. 이러한 추가 코드들 때문에 Person이라는 클래스가 단순히 String 필드들(이름과 주소)을 가진 데이터 클래스라는 것을 잊어버리게 한다.

지루하게 반복되는 코드

Person 클래스를 만드는데 필요한 위 6가지 코드가 Person과 같은 단순 불변 데이터 클래스를 만들 때 계속해서 반복된다. 또한, 필드가 추가될 때마다 이에 맞게 매번 새로운 코드들을 추가해줘야 한다.

Record 클래스로 대체하기

이러한 문제점들을 해결하기 위해 우리는 Record 클래스를 다음과 같이 사용할 수 있다.

public record Person (String name, String address) {}

위 코드처럼 레코드 클래스는 필드의 타입과 이름만 적으면 private, final 필드 적용, Equals, hashCode, toString 메서드와 모든 인수가 담긴 public 생성자를 Java 컴파일러에 의해 생성하게해준다.

Reference

https://www.baeldung.com/java-record-keyword

profile
백엔드개발자 손창현입니다.

0개의 댓글