새소식

반응형
Java

[Java] 17 버전 주요기능

  • -
반응형

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

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

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

 

기존 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"; }; }

 

기존 Java 11:

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

Java 17 변경점:

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

 

기존 Java 11:

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

Java 17 변경점:

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

 

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

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

 

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 체크 후, 형변환을 따로 필요하였지만

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()); }
반응형

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

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