본문 바로가기
개발자 준비/JAVA

Record

by osul_world 2021. 11. 23.
728x90

Record


JDK 14 에서 도입

레코드(record)란 "데이터 클래스"이며 순수하게 데이터를 보유하기 위한 특수한 종류의 클래스이다.

코틀린의 데이터 클래스와 비슷한 느낌이라고 보면 된다.

기존 클래스를 선언할때 쓸때없이 반복적인 코드를 자동화해서 편리하게 사용할수있다.

ex) getter setter

스프링의 @DATA와 비슷한 느낌인것 같다.

record 클래스를 정의할때, 그 모양은 정말 데이터의 유형만 딱 나타내는 듯한 느낌이다. 훨씬더 간결하고 가볍다.

Entity 혹은 DTO 클래스를 생성할때 사용되면 굉장히 좋을 듯하다.

https://velog.io/@gillog/Entity-DTO-VO-%EB%B0%94%EB%A1%9C-%EC%95%8C%EA%B8%B0

 

기존 클래스와 레코드 클래스를 비교해보자

 

기존 클래스

public class NotRecord {
	private String name;
    private int age;
    private int coin;

    public testRecord(String name, int age, int coin) {
        this.name = name;
        this.age = age;
        this.coin = coin;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getCoin() {
        return coin;
    }

    public void setCoin(int coin) {
        this.coin = coin;
    }
}

생성자 getter setter 등 클래스를 만들때 항상 중복되는 메서드들을 가지고있다.

 

레코드 클래스

public record Record(String name,int age,int coin) {}

생성자 getter setter 등 클래스를 만들때 항상 중복되는 메서드들을 모두 자동으로 생성해 준다.

내부에는 개발자가 직접 작성한 메서드들만 포함되면 된다.

public class test {
    public static void main(String[] args) {
        Record r = new Record("오",10,10);
	
        //getter
        r.age(); 
        r.coin();
        r.name();
    }
}

각 필드의 getter는 getXXX()가 아닌, 필드명을 딴 getter가 생성된다.(name(), age(), address())

java.lang.record를 내부적으로 상속받는다. 따라서 관련 api 제공

notify() ,wait() 등

 

주의사항

레코드 클래스는 몇가지 주의점이 존재한다.

레코드 클래스 자체가 final이라 상속이 불가능 하며, 멤버변수 등 내부 필드도 모두 final로 정의된다.

public final class NotRecord {
	private final String name;
    private final int age;
    private final int coin;

    //생성자,getter,setter ..etc
}

클래스로 표현하면 다음과 같을것이다.

 

 

Reference

https://coding-start.tistory.com/355

 

728x90

'개발자 준비 > JAVA' 카테고리의 다른 글

[JAVA 더 깊게] JAVA One Paper  (0) 2022.01.10
서버간 통신의 시작 RestTemplate  (0) 2022.01.04
Optional(for null-safe)  (0) 2021.12.31
JVM, JRE, JDK  (0) 2021.12.18
Enum 리마인드  (0) 2021.11.23