[DEV] J-Jay

Java 17 주요변화 본문

Back-end/Java

Java 17 주요변화

J-Jay 2023. 8. 31. 22:43
728x90

텍스트 블록

Java 17 이전 버전에서는 여러 줄의 텍스트를 작성하려면 \n을 추가해야 했지만 이제는 """로 감싼 텍스트를 사용해 여러 줄의 텍스트를 표현할 수 있다.

    String query11 = "SELECT * FROM \"items\"\n"+
            "WHERE \"status\" = \"NORMAL\";";

    String query17 = """
             SELECT * FROM "items"
             WHERE "status" = "NORMAL";
             """;

formatted()메서드

값을 파싱하기 위한 formatted() 메소드를 제공한다.

    String content = """
            {
             "id" : %d,
             "name" : %s,
            }
            """.formatted(1, "J-Jay");

 

레코드

레코드는 데이터 전달을 목적으로 하는 객체를 더 빠르고 간편하게 만들기 위한 기능이다.

레코드는 상속을 할 수 없고 파라미터에 정의한 필드는 private final로 정의된다 또한 레코드는 Getter를 자동으로 만들기 때문에 어노테이션이나 Getter 메서드를 정의하지 않아도 된다.

record Item(String name, int price){
 //파라미터가 private final로 정의된다.
}

Item hat = new Item("hat", 1000);
hat.prcie(); //1000

 

 

패턴매칭

패턴 매칭은 타입 확인을 위해 사용하던 instanceof 키워드를 조금 더 쉽게 사용할 수 있게 해준다.

이전에는 instanceof 키워드와 형변환 코드를 조합해야 했지만 이제는 바로 형변환을 한 다음 사용할 수 있다.

// Java 11
if (a instanceof Integer) {
	Integer i = (Integer) a;
    ...
}

if (a instanceof Integer i) {
	...
}

 

자료형에 맞는 case 처리

switch-case문으로 자료형에 맞게 case 처리를 할 수 있다.

static double getIntegrVal(Obejct o) {
	return switch (o) {
    	case Double d -> d.intVal();
        case Float f -> f.intVal();
        case String s -> Integer.parseInt(s);
        default -> 0d;
    };
}

Servelt, JPA의 namespace javax → Jakarta로 대체

패키지 네임스페이스가 javax.* 에서 jakarta.*로 변경되었다.

 

GraalVM기반의 스프링 네이티브 지원

스프핑 애플리케이션을 네이티브 이미지로 컴파일해 JVM에 구동되는 애플리케이션에 비해 시작 시간과

메모리 오버 헤드를 줄일 GraalVM기반의 스프링 네이티브를 공식 지원한다.

JVM 실행 파일과 비교해 네이티브 이미지를 사용하면 가동 시간이 짧아지고 메모리르 더 적게 소모한다.

'Back-end > Java' 카테고리의 다른 글

다형성(Polymorphism)  (0) 2024.05.19
상속(Inheritance)  (0) 2024.05.19
Java I/O - 2  (0) 2023.05.02
Java I/O - 1  (0) 2023.05.01
인터페이스(interface)  (0) 2023.04.30