티스토리 뷰

반응형

Java / Spring Framework / Spring Boot Release

Java

Java 10

Local Variable Type Inference

// Choose variable names that provide useful information.
// Before
List<Customer> x = dbconn.executeQuery(query);
// After
var custList = dbconn.executeQuery(query); 
// Consider var when the initializer provides sufficient information to the reader.
// Before
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
 // After
var outputStream = new ByteArrayOutputStream();

 // Before
BufferedReader reader = Files.newBufferedReader(...);
List<String> stringList = List.of("a", "b", "c");
 // After
var reader = Files.newBufferedReader(...);
var stringList = List.of("a", "b", "c");
// Take care when using var with literals.
// Before
try (InputStream is = socket.getInputStream();
     InputStreamReader isr = new InputStreamReader(is, charsetName);
     BufferedReader buf = new BufferedReader(isr)) {
    return buf.readLine();
}
// After
try (var inputStream = socket.getInputStream();
     var reader = new InputStreamReader(inputStream, charsetName);
     var bufReader = new BufferedReader(reader)) {
    return bufReader.readLine();
}
// Don’t worry too much about “programming to the interface” with local variables.
// Before
List<String> list = new ArrayList<>();
// After
var list = new ArrayList<String>();

Java 14

Switch Expressions

// case L ->" Labels
Day day = Day.WEDNESDAY;    
System.out.println(
    switch (day) {
        case MONDAY, FRIDAY, SUNDAY -> 6;
        case TUESDAY                -> 7;
        case THURSDAY, SATURDAY     -> 8;
        case WEDNESDAY              -> 9;
        default -> throw new IllegalStateException("Invalid day: " + day);
    }
);    
// “Case L” & `yield` 
int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> {
        System.out.println(6);
        yield 6;
    }
    case TUESDAY -> {
        System.out.println(7);
        yield 7;
    }
    case THURSDAY, SATURDAY -> {
        System.out.println(8);
        yield 8;
    }
    case WEDNESDAY -> {
        System.out.println(9);
        yield 9;
    }
    default -> {
        throw new IllegalStateException("Invalid day: " + day);
    }
}; 
// ...

Java 15

Text Blocks

// Using a literal string
String dqName = "Pat Q. Smith";
// Using a text block
String tbName = """
                Pat Q. Smith""";

dqName.equals(tbName)    // true
dqName == tbName         // true

Java 16

Record Classes

불변 데이터 운반에 집중된 클래스

  • 접근자 / 생성자 / equals / hashCode / toString 자동 생성
  • 정적 필드와 초기화, 정적 메서드 사용 가능 -> 단, 인스턴스 초기화는 불가능
  • Jackson 직렬화 지원
  • class casting 불필요
// 정식 생성자
record Rectangle(double length, double width) {
    public Rectangle(double length, double width) {
        if (length <= 0 || width <= 0) {
            throw new java.lang.IllegalArgumentException(
                String.format("Invalid dimensions: %f, %f", length, width));
        }
        this.length = length;
        this.width = width;
    }
}

// 압축 생성자
record Rectangle(double length, double width) {
    public Rectangle {
        if (length <= 0 || width <= 0) {
            throw new java.lang.IllegalArgumentException(
                String.format("Invalid dimensions: %f, %f", length, width));
        }
    }
}

Java 17

Sealed Classes

  • 봉인된 클래스로 사용할 수 있는 클래스를 지정
    • final : 더 이상 연장 불가
    • sealed : 허가된 서브클래스에 대하여 확장만 가능
    • non-sealed: 알 수 없는 하위 클래스로 확장 가능
public sealed class Shape
    permits Circle, Square, Rectangle {
    // 허용 클래스 정의
}

public final class Circle extends Shape {
    public float radius;
}

// 비표준 클래스
public non-sealed class Square extends Shape {
   public double side;
}  

public sealed class Rectangle extends Shape 
    permits FilledRectangle {
    public double length, width;
}

public final class FilledRectangle extends Rectangle {
    public int red, green, blue;
}

Spring Framework 6.0

What's New in Spring Framework 6.x · spring-projects/spring-framework Wiki · GitHub

  • Java EE 8 -> Jakarta EE 9 변경
  • 네임스페이스(namespace) 변경: javax.* -> jakarta.*
  • AOP(Ahead-Of-Time) 엔진 도입
    • Spring Native 이미지(Graal VM image) 빌드
    • 빌드 단계에서 정적분석을 통해서 최적화 작업 수행
  • Micrometer 관측 지원 강화

Spring Boot 3.0

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes

최소 요구사항

  • Gradle 7.3
  • Java 17
  • Kotlin 1.6
  • Jakarta EE 9
  • Spring Framework 6
  • 미사용 라이브러리 및 지원 중단

Reference

Java

Spring Framework

Spring Boot

반응형

'Web' 카테고리의 다른 글

[RSA] RSA Encryption/Decryption in JAVA  (0) 2023.04.19
[Redis] Transaction  (0) 2023.03.03
[Troubleshooting] Enum Class(싱글톤)의 동시성 이슈  (0) 2022.11.21
[Vue.js] Vue.js 시작하기  (0) 2022.07.30
Refactoring With IntelliJ Summary  (0) 2022.07.08
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday