자바

레코드

winwin-k9 2023. 1. 16. 12:04

레코드란?

불변 데이터 객체를 쉽게 생성할 수 있도록 하는 새로운 유형의 클래스이다.

 

public class Person {
    private final String name;
    private final int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
}

위와같은 VO를 생성한다고 해보자.

모든 필드에 final을 명시해야 하고, 생성자 와 getter가 필요하다.

이후 VO의 특성상 동일성 보장을 위한 hashCorde와 equal의 재정의와 toString 또한

후에 필요하게 된다.

이를 레코드를 통해 깔끔히 처리할 수 있다.

 

public record Person(String name, int age) {
}

레코드 클래스를 사용하면 훨씬 간결한 방식으로 동일한 불변 데이터 객체 정의할 수 있디.

     - 이름(Person), 헤더(String name, int age), 바디({})

 

컴파일러는 헤더를 통해 내부 필드를 추론한다.

     - 생성자를 작성하지 않아도 되고 toString, equals, hashCode 메소드에 대한 구현을 자동으로 제공

 

 

 

public class RecordDemo {
    public static void main(String[] args){
        Person person = new Person("Ted", 100);
        System.out.println("이름:"+ person.name() + " 나이:"+person.age());
        System.out.println("객체 정보:"+person.toString());
        Person person2 = new Person("Ted", 100);
        Person person3 = new Person("Dean", 200);
        
        if (person.equals(person2)) System.out.println("person, person2는 같은 사람");
        else System.out.println("person, person2는 다른 사람");
        
        if (person.equals(person3)) System.out.println("person, person3는 같은 사람");
        else System.out.println("person, person3는 다른 사람");
    }
}

 

728x90