PSD( Private-Self-Development )

JAVA 17 변경점 본문

Backend/JAVA

JAVA 17 변경점

chjysm 2026. 1. 27. 15:18

JAVA 17의 경우 코드를 예쁘고 간결하게 줄여주는 문법이 많이 등장하였다.

 

1. Record 추가 

기존 단순 데이터 전송용 객채(DTO) 를 만들기 위해서는
Lombok 이나 기본적인 코드들을 많이 작성하여 생성해야 했음.

이를 Record 를 사용하여 단순하게 대체할 수 있다. (단, 불변 객체이다)

 

// 기존
public class UserDto {
    private final String name;
    private final int age;

    public UserDto(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // Getter, toString, hashCode 등
}
// record
public record userDto(String name, int age){}

 

 

2. Text Block 추가 

지저분하게 사용할 수 밖에 없던 문자열을 이제는 그나마 깔끔하게 사용 할 수 있다. 

// 기존
String json = "{\n" +
              "  \"name\": \"test\",\n" +
              "  \"job\": \"Developer\"\n" +
              "}";

 

String json = """
    {
      "name": "test",
      "job": "Developer"
    }
    """;

 

 

3. 값을 리턴하는 Switch 문 추가 

// 기존 
String result;
switch (day) {
    case MONDAY:
    case FRIDAY:
        result = "Working";
        break;
    default:
        result = "Unknown";
}
// 신규
String result = switch (day) {
    case MONDAY, FRIDAY -> "Working";
    default -> "Unknown";
};

 

4. instanceof 의 형변환 자동화 추가 

// 기존
if (obj instanceof String) {
    String s = (String) obj; // 무조건 캐스팅 한번 해줘야함
    System.out.println(s.length());
}
// 신규
if (obj instanceof String s) { // 바로 변수로 변환
    System.out.println(s.length());
}

 

 

5. NullPointerException 에러 로그 상세화 

기존에는 user.getAddress().City().getName() 에서 에러가 발생하면 정확이 어디에서 발생한 에러인지 알 수 없었다.
이제는 기본적으로  user.getAddress().City() 에서 에러가 발생 했다! 와 같이 상세 표시된다.

 

6. Stream.toList() 추가 

기존 : .collect(Collectors.toList())

신규 : .toList() (단, 불편객체를 리턴한다)

'Backend > JAVA' 카테고리의 다른 글

JAVA 21 변경점  (0) 2026.01.27
JAVA 11 변경점  (0) 2026.01.27
JAVA 8 변경점  (0) 2026.01.27
가비지 컬렉션(Garbage Collection)  (0) 2023.07.12
생성자 주입을 사용하는 이유  (0) 2023.01.30