Computer Science/Java / / 2024. 4. 3. 23:35

JAVA record란?

package record;

import java.util.Objects;

public class Member {
    private final String email;
    private final String passwd;

    public Member(String email, String passwd) {
        this.email = email;
        this.passwd = passwd;
    }


    @Override
    public int hashCode() {
        return Objects.hash(email, passwd);
    }

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

    @Override
    public String toString() {
        return "Member email = " + email + "PW = " + passwd;
    }

    public String getEmail() {
        return email;
    }

    public String getPasswd() {
        return passwd;
    }
}

서버에서 엔티티를 만들다 보면 가장 자주 볼 수 있는 형태의 엔티티인 Member이다.

오버라이딩 된 메서드들을 보면 hashCode, equals, toString 에서 부터 getter 까지 상당히 많은 보일러 플레이트들을 볼 수 있다.

물론 IDE의 발전으로 이러한 보일러 플레이트를 단축키 몇 번으로 줄일 수 있지만 근본적인 해결법은 아니였다

이러한 보일러 플레이트들을 줄이고자 하는 노력은 개발자들의 숙명이다.

 

그래서 JAVA는 JDK14 부터 Preview를 통해 record의 출현을 알렸으며, JDK17에서 정식 출시되었다.

public record Member(String email, String passwd) {

위의 코드가 이렇게 한줄로 표현이 가능해졌다.

다만 record는 몇몇 제약 사항을 가지고 있다.

레코드는 다른 클래스를 상속 받지 못하며, private final fields 이외의 인스턴스 필드를 생성할 수 없습니다.

즉, 선언되는 모든 필드는 static 이어야 합니다.
public record Member(String email, String passwd) {
    private final static String name = "JUN";
}

또한 record는 기본 생성자를 제공하여 주지 않기 때문에 직접 생성해야 합니다.

 


참조: https://colevelup.tistory.com/28

'Computer Science > Java' 카테고리의 다른 글

Class Loading  (0) 2024.05.05
Inner Class  (0) 2024.04.28
JAVA 8 vs JAVA 11 vs JAVA 17  (2) 2024.04.21
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유