Java

[JAVA] Java 17 기준 최신 문법

cob 2025. 7. 16. 11:07

 

 

기능 설명   Java 버전
Text Blocks (""") 멀티라인 문자열 Java 15 정식
Switch Expression 값 반환형 switch Java 14 정식
Records 자동 DTO 클래스 Java 16 정식
Pattern Matching for instanceof instanceof + 형변환 생략 Java 16 정식
Sealed Classes 상속 가능한 하위 클래스 제한 Java 17 정식
var 키워드 지역 변수 타입 추론 Java 10 정식

 

 

 

1. 텍스트 블록 (Text Block)

[AS-IS]

String json = "{\n" +
              "  \"name\": \"홍길동\",\n" +
              "  \"age\": 30\n" +
              "}";

 

[TO-BE]

String json = """
              {
                "name": "홍길동",
                "age": 30
              }
              """;

 

  • \n, + 없이도 줄 바꿈과 들여 쓰기 표현 가능
  • 가독성이 매우 좋아지고, 특히 HTML/SQL/JSON 등 다중 문자열에 유리

 

 

2. 스위치 표현식 (Switch Expression)

[AS-IS]

int num = ...;
String result;
switch (num) {
    case 1:
        result = "ONE";
        break;
    case 2:
        result = "TWO";
        break;
    default:
        result = "OTHER";
}

 

 

[TO-BE]

int num = ...;
String result = switch (num) {
    case 1 -> "ONE";
    case 2 -> "TWO";
    default -> "OTHER";
};
  • 가독성 향상
  • 코드 라인 수 감소
  • 버그 가능성 감소 (특히 switch break 누락)
  • 표현력 있는 코드 작성 가능

 

3. Records (레코드 클래스)

getter, equals, hashCode, toString 자동 생성 되지만, 모든 필드가 final (불변) 이다.
public record User(String name, int age) {}

User user = new User("홍길동", 30);
System.out.println(user.name());  // "홍길동"
  •  getter, equals, hashCode, toString 자동 생성
  • DTO, VO 같은 단순 데이터 객체에 유용
  • JavaBean 패턴보다 훨씬 간결

 

4. Pattern Matching for instanceof

[AS-IS]

if (obj instanceof String) {
    String s = (String) obj;
}
  • obj가 null일 경우 NullPointerException 발생
  • 따로 형변환 필요

 

[TO-BE]

if (obj instanceof String s) {
    System.out.println(s.toLowerCase());
}
  • instanceof 연산자는 obj가 null이면 항상 false를 반환해서 null 체크 역할도 함

 

 

 

5. Sealed Classes (봉인 클래스)

상속 가능한 클래스를 명시적으로 제한하는 기능
public sealed class Shape permits Circle, Square {}

final class Circle extends Shape {}
final class Square extends Shape {}
  • 유지보수성과 보안성 향상

 

 

 

6. Local Variable Type Inference (var)

지역 변수의 타입을 var로 생략 가능
var list = new ArrayList<String>();  // 타입 자동 추론
  • 가독성 향상
  • 복잡하거나 불분명한 경우엔 지양

 

 

반응형