class record

haruceki·2024년 9월 10일
0

record는 Java 14에서 도입된 새로운 클래스 타입으로, 불변 데이터 객체를 간결하게 표현하기 위해 만들어졌다.

DB에 저장된 데이터의 전송 객체 dto는 record로 쓸 경우 적합한 형태를 가지고 있다.

일반 클래스와 차이점

1. 자동으로 생성되는 메서드

record는 필드에 대해 자동으로 생성자, equals(), hashCode(), toString() 메서드를 생성.
즉, record는 선언만으로도 이 메서드들을 명시적으로 작성할 필요가 없다.

2. 불변성

record로 선언된 클래스의 필드는 불변하다. 즉, 한번 초기화된 필드는 수정할 수 없다.
record는 필드에 대해 자동으로 private final 키워드를 적용한다.
예를 들어, 아래와 같은 record는 자동으로 username과 password 필드가 private final로 선언된다.

public record LoginRequestDto(String username, String password) {
}

3. 명시적인 선언의 간결성

일반 클래스에서는 필드를 선언하고, 생성자, getter, toString(), equals() 및 hashCode() 메서드를 직접 작성해야 하지만, record는 이러한 메서드들을 자동으로 생성하여 코드를 간결하게 만들어 준다. 즉 위의 record는 아래의 코드를 대신할 수 있다.

public class LoginRequestDto {
    private final String username;
    private final String password;

    public LoginRequestDto(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "LoginRequestDto{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        LoginRequestDto that = (LoginRequestDto) o;
        return username.equals(that.username) && password.equals(that.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password);
    }
}

4. 필드에 대한 접근자 (Accessor) 자동 생성

record는 필드에 대해 getter 메서드도 자동으로 생성한다. 하지만, 일반적으로 getter라는 이름 대신 필드 이름과 동일한 메서드를 생성한다.

LoginRequestDto dto = new LoginRequestDto("user", "password");
String username = dto.username();  // 필드 이름을 메서드로 접근

5. 내부 구현 제한

record는 상속을 지원하지 않는다. 다른 클래스를 상속할 수 없고, record를 상속받을 수도 없다. 다만, 인터페이스는 구현할 수 있다.

profile
희망도 절망도 없이 매일 코딩을 한다.

0개의 댓글