본문 바로가기

학습 기록/스프링 부트3 백엔드 개발자 되기[자바편]

[02장.3] 4. 스프링 부터 3와 자바 버전

스프링 부트3 이전과 이후 사용 가능한 자바 버전의 범위가 다름

스프링 부트 2는 자바 8 버전 이상을 사용했지만, 스프링 부트 3은 자바 17버전 이상을 사용해야 함

 

[자바 17 버전 주요 변화]

1) 텍스트 블록

: 여러 줄의 텍스트를 작성하려면 \n을 사용했지만 """로 감싼 텍스트를 사용해 여러 줄의 택스트를 표현 가능

String query11 = "SELECT * FROM \"items\"\n"+
				 "WHERE \"status\"=\"ON_SALE\"\n" + 
                 "ORDER BY \"price\";\n";

String qeury17 = """
				 SELECT * FROM "items"
                 WHERE "status" = "ON_SALE"
                 ORDER BY "price";
                 """;

 

2) formatted() 메서드

: 값을 파싱하기 위한 메서드

String textBlock17 = """
{
	"id" : %d
    "name" : %s,
}
""".formatted(2, "juice");

 

3) 레코드

: 데이터를 전달하는 목적으로 객체를 더 빠르고 간편하게 만들기 위한 기능

: 상속할 수 없고, 파라미터에 정의한 필드는 private final로 정의

: 게터(getter)를 자동으로 만들기 때문에 애너테이션이나 메서드로 게터 정의를 하지 않아도 됨

record Item(String name, int price){
	//파라미터가 private finalfh wjddml
}
Item juice = new Item("juice", 3000);
juice.price() // 3000

 

4) 패턴 매칭

: 타입 확인을 위해 사용하던 instanceof 키워드를 조금 더 쉽게 사용할 수 있도록 함

// 11 버전
if(o instanceof Integer){
	Integer i = (Integer) o;
    // 생략
}


// 17 버전
if(o instanceof Integer i){
}

 

5) 자료형에 맞는 case 처리

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

 

6) Servlet, JPA의 네임 스페이스가 Jakarta로 대체

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

 

7) GraalVM기반의 스프링 네이티브 공식 지원

: 스프링 애플리케이션을 네이티브 이미지로 컴파일해 JVM에 구동되는 애플리케이션에 비해 시작 시간과 메모리 오버 헤드를 줄일 GraalVM 기반의 스프링 네이티브 공식 지원

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