Java/Version
Java 17
창욱씨
2022. 8. 23. 23:58
반응형
🔑 주요 신규 기능
1. Sealed Classes (JEP 409)
클래스 상속을 명시적으로 제한할 수 있습니다.
public sealed class Shape permits Circle, Rectangle, Triangle {
// ...
}
public final class Circle extends Shape { }
public final class Rectangle extends Shape { }
public non-sealed class Triangle extends Shape { }
2. Pattern Matching for instanceof (JEP 394)
instanceof 검사 후 별도 캐스팅 없이 바로 사용 가능합니다.
// Before
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
// Java 17
if (obj instanceof String s) {
System.out.println(s.length());
}
3. Records (JEP 395)
불변 데이터 클래스를 간결하게 정의합니다.
public record Point(int x, int y) { }
// equals(), hashCode(), toString(), getter 자동 생성
4. Switch Expressions (JEP 361)
switch를 표현식으로 사용할 수 있고, 화살표 구문을 지원합니다.
String result = switch (day) {
case MONDAY, FRIDAY -> "Working";
case SATURDAY, SUNDAY -> "Weekend";
default -> "Midweek";
};
5. Text Blocks (JEP 378)
여러 줄 문자열을 가독성 좋게 작성합니다.
String json = """
{
"name": "Java",
"version": 17
}
""";
6. 기타 주요 변경사항
| 기능 | JEP | 설명 |
|---|---|---|
| Strong Encapsulation of JDK Internals | 403 | sun.misc.Unsafe 등 내부 API 접근 차단 |
| Foreign Function & Memory API (Incubator) | 412 | JNI 대체를 위한 네이티브 코드 호출 API |
| Vector API (Second Incubator) | 414 | SIMD 연산을 활용한 고성능 벡터 계산 |
| Context-Specific Deserialization Filters | 415 | 역직렬화 보안 강화 |
| Deprecate the Applet API | 398 | Applet API 제거 예정 |
| Remove RMI Activation | 407 | RMI Activation 메커니즘 제거 |
| macOS/AArch64 Port | 391 | Apple Silicon (M1) 네이티브 지원 |
반응형