본문 바로가기
Language/Java

[Java] Java 버전별 특징 : Java 14 (Record, instanceof 개선, NPE 개선)

by 계범 2024. 10. 6.

Record 타입 (Preview)

Java 14부터 Record 타입이 사용 가능합니다.

record타입은 불변객체 타입으로 해당 필드에 final 선언 및 생성자, getter, equals(), hashCode(), toString() 메서드를 자동으로 생성합니다.

 

VO 객체에 사용하면 좋을 듯!

public class Java14 {
    public static void main(String[] args) {
        testRecord();
    }

    private static void testRecord() {
        // 생성자, getter, equals(), hashCode(), toString() 메소드 자동 생성
        Person person = new Person("kye", 32);
        int age = person.age();
        String name = person.name();

        // Objects.hash()를 이용한 hashCode() 메소드 생성
        int i = person.hashCode();

        // equals는 두 record객체가 같은 클래스인지 확인 후 모든 필드가 동일한지 순차적으로 비교.
        Object newPerson = new Person("kye", 32);
        boolean equals = person.equals(newPerson);
        System.out.println(equals); // true

        Person newPerson2 = new Person("kye", 31);
        boolean equals2 = person.equals(newPerson2);
        System.out.println(equals2); // false

        // toString() 메소드 생성
        System.out.println(person); // Person[name=kye, age=32]
    }

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

    // 다 직접 생성해줘야함
    public static class NotRecordPerson {
        private String name;
        private int age;

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

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }
    }
}

 

instanceof 패턴 매칭 (Preview)

기존과 다르게 형변환 없이 바로 해당 타입 변수에 할당이 가능해졌습니다.

public class Java14 {
    public static void main(String[] args) {
        originInstanceof();
        patternMatchingInstanceof();
    }

    private static void patternMatchingInstanceof() {
        Object obj = "Hello!";
        if(obj instanceof String str){
            System.out.println(str);
        }
    }

    private static void originInstanceof() {
        Object obj = "Hello!";
        if(obj instanceof String){
            String str = (String) obj;
            System.out.println(str);
        }
    }
}

 

NPE 에러 문구 개선

Java 14에서는 **NullPointerException (NPE)**가 발생할 때 더 구체적인 정보를 제공하도록 개선되었습니다. 이제 예외 메시지에서 정확히 어느 부분에서 null이 발생했는지를 명확히 알려줍니다.

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Person.getAddress()" because "person" is null
    at Main.main(Main.java:3)

 

 

 

그 외

12에 들어온Switch Expressions standard됨.

댓글