새소식

반응형
Java

[Java] 17 버전 주요기능

  • -
반응형

java 언어를 사용해서 개발하는 대부분의 application은 spring을 사용할 것이다.

spring-boot 3.0부터는 java17 버전 이후만 지원한다고 하니

java17 버전을 사용하기 위해서 공부해 보자.

 

switch문 개선

기존 Java 11:

  • switch는 int, String 등에만 사용 가능, case마다 break 필수

Java 17 변경점:

  • switch에서 패턴 매칭을 지원하여 다양한 타입을 처리 가능
  • case 안에서 break 없이 바로 값 반환 가능
static String test(Object obj) {
    return switch (obj) {
        case Integer i -> "Integer: " + i;
        case String s -> "String: " + s;
        case null -> "null value";
        default -> "Unknown type";
    };
}

 

sealed classes

기존 Java 11:

  • abstract 클래스로만 상속을 제한할 수 있었음

Java 17 변경점:

  • sealed 키워드를 사용해 명시적으로 상속 가능한 클래스 제한 가능
sealed class Shape permits Circle, Rectangle {}

final class Circle extends Shape {}
final class Rectangle extends Shape {}

 

ZGC 및 G1GC 성능 개선

기존 Java 11:

  • ZGC 도입됐지만 성능 최적화 부족

Java 17 변경점:

  • ZGC가 더 낮은 메모리 오버헤드와 짧은 STW(Stop The World) 시간 제공
  • G1 GC 성능 개선으로 빠른 메모리 할당 및 회수 가능

 

텍스트 블록 (Text Blocks)

멀티라인 문자열을 처리의 불편함 개선 

  • 기존에는 \n 줄 바꿈과 + 연결을 사용해야 했음
  • """ (triple quotes)를 사용하여 멀티라인 문자열을 쉽게 작성 가능
    • \n 없이 줄 바꿈을 표현 가능
    • 코드 가독성이 향상됨
    • JSON, SQL 같은 멀티라인 데이터를 더 쉽게 다룰 수 있음
String json = "{\n" +
              "    \"name\": \"John\",\n" +
              "    \"age\": 25\n" +
              "}";
String json2 = """
    {
        "name": "John",
        "age": 25
    }
    """;

 

record 클래스

DTO (데이터 저장용 객체)를 만들 때 보일러플레이트 코드 개선

  • 기존에는 getter/setter, toString(), equals(), hashCode()를 직접 구현

record를 사용하면 자동으로 필드, 생성자, toString(), equals(), hashCode()가 생성됨

  • DTO, VO 같은 불변 객체(Immutable Object) 생성이 간단해짐
  • 자동으로 getter, equals(), hashCode(), toString()을 제공
  • 코드가 훨씬 간결해짐
public class User {
    private final String name;
    private final int age;

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

    public String name() { return name; }
    public int age() { return age; }

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }

    @Override
    public boolean equals(Object o) { /* equals 구현 */ }
    @Override
    public int hashCode() { /* hashCode 구현 */ }
}

record User(String name, int age) {}

 

instanceof 패턴 매칭

기존에는 instanceof 체크 후, 형변환을 따로 필요하였지만

17부터는 instanceof 사용 시, 형변환을 한 번에 처리 가능

  • 중복되는 (String) obj 형변환 코드가 필요 없음
  • 코드 가독성이 좋아짐
if (obj instanceof String) {
    String s = (String) obj; // 형변환 필요
    System.out.println(s.length());
}

if (obj instanceof String s) { // 변수 s에 자동 할당
    System.out.println(s.length());
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.