[Java] Java16: Record Class

μžλ°” ν•˜λ©΄ μ•ˆν‹°νŒ¨ν„΄μœΌλ‘œ μˆœμœ„μ— κΌ½νžˆλŠ” 것 쀑 ν•˜λ‚˜κ°€ λ°”λ‘œ Getter Setter νŒ¨ν„΄μ΄λ‹€.

이 νŒ¨ν„΄μ€ λ‹¨μˆœν•œ 데이터성 νƒ€μž…(DTO λ“±)을 λ‹€λ£° λ•Œ μ‚¬μš©ν•˜κ³€ ν•œλ‹€.
κ·Έλƒ₯ nameκ³Ό age κ°’ 2개만 κ°–λŠ” 데이터 νƒ€μž…μ„ μžλ°”μŠ€νƒ€μΌλ‘œ 짜면 μ €λ ‡κ²Œ λœλ‹€.
λ‹Ήμ—°νžˆ ν•„λ“œκ°€ λŠ˜μ–΄λ‚˜λ©΄ λŠ˜μ–΄λ‚ μˆ˜λ‘ μ½”λ“œλΌμΈλ„ κΈ‰κ²©ν•˜κ²Œ λŠ˜μ–΄λ‚œλ‹€.

μ €κ²Œ μ˜λ―Έκ°€ μžˆμ–΄ λ³΄μ΄λ‚˜?
아무도 κ·Έ 이유λ₯Ό λͺ¨λ₯΄λ©΄μ„œ μ“°λŠ” 적폐 νŒ¨ν„΄μ€‘ ν•˜λ‚˜λ‹€.
λ§λ‘œλŠ” μ“°λ©΄μ„œ μΊ‘μŠν™”λ‹ˆ μ€λ‹‰ν™”λ‹ˆ 객체지ν–₯μ΄λ‹ˆ ν•˜λŠ”λ°, μ €κ²Œ μ–΄λ”œλ΄μ„œ 객체지ν–₯μ μ΄λž€ 건가?
μ• μ΄ˆμ— λ‹€ get set λ§Œλ“€κ±°λ©΄ 은닉화가 λ˜μ§€λ„ μ•ŠλŠ”λ‹€.


κ·Έλ‚˜λ§ˆ μ΅œμ‹  λ²„μ „μ—μ„œλŠ” μ΄λŸ¬ν•œ κ΅¬νƒœλ“€μ„ λ²—μ–΄λ‚˜λ €λŠ” λ…Έλ ₯듀을 쑰금 ν•˜κΈ΄ ν•˜λŠ”λ°, νš¨κ³ΌλŠ” 없을 것 κ°™λ‹€.

μ•„λ¬΄νŠΌ record classλŠ” 이런 데이터성 νƒ€μž…λ“€μ„ μ •μ˜ν•  λ•Œ μ‚¬μš©ν•˜λΌκ³  λ§Œλ“  νŠΉμˆ˜ν•œ 클래슀 μ •μ˜λ²•μ΄λ‹€.
μ‹ νƒμŠ€λŠ” λŒ€κ°• λ‹€μŒκ³Ό 같은 ν˜•νƒœλ₯Ό κ°€μ§„λ‹€.

record λ ˆμ½”λ“œλͺ… (ν•„λ“œ1, ν•„λ“œ2, ...)
{
   ... 클래슀 μ •μ˜
}

λ ˆμ½”λ“œλŠ” μƒμ„±μžλ₯Ό 톡해 λΆˆλ³€ 객체λ₯Ό μƒμ„±ν•˜λ©°, ν•„λ“œλͺ…κ³Ό λ™μΌν•œ λ©”μ„œλ“œλ₯Ό 톡해 ν•„λ“œκ°’μ„ μ‘°νšŒν•  수 μžˆλ‹€.
μ›ν•œλ‹€λ©΄ μ΄λŸ°μ €λŸ° λ©”μ„œλ“œλ“€μ„ 직접 κ΅¬ν˜„ν•΄μ„œ μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€.

μ˜ˆμ‹œμ½”λ“œλ‹€.

public class MyClass {
    public static void main(String args[]) {
        var john = new Person("john", 155);

        System.out.println("name: "+john.name());
        System.out.println("age: "+john.age());
    }
}

record Person (String name, int age)
{ }

μ €κΈ°μ„œ μ •μ˜ν•œ Person λ ˆμ½”λ“œλŠ”

record Person (String name, int age)
{ }

μ‹€μ œλ‘œ μ΄λ ‡κ²Œ λ³€ν™˜μ΄ λœλ‹€.

public final class Person {
    private final String name;
    private final int age;

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

    String name()  { return this.name; }
    int age() { return this.age; }

    public boolean equals...
    public int hashCode...

    public String toString() {...}
}