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는 기본 생성자를 제공하여 주지 않기 때문에 직접 생성해야 합니다.
'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 |