Java

[Java] Java 17 특징

kittity 2025. 1. 30. 17:13

Java 17은 2021년 9월에 출시된 LTS(Long Term Support) 버전으로 Java 17에서 추가된 기능과 특징에 대해 정리해보고자한다. 주요 특징에 대해 정리하면 다음과 같다.

  1. Record
  2. Sealed Class
  3. Switch Expression
  4. Stream toList()
  5. Text Block

위의 항목을 하나씩 살펴보자.

 

1. Record

  • Record는 데이터 클래스를 의미하며 불변 객체를 생성하여 DTO 정의시 편리하게 사용할 수 있다.
  • 모든 필드가 private final로 선언된다.
  • 상속이 불가능하다.
  • toString, equals, hashCode 등의 구현을 자동으로 해준다.
  • 예시
    public record Animal(
        String type,
        String name
    ){
    }

 

2. Sealed Class

  • 상속/구현 가능한 클래스를 명시적으로 제한할 수 있는 기능이다.
  • 무분별한 상속/구현 방지 목적으로 지정한 클래스만 허용하며 가능한 클래스를 쉽게 파악 가능하다.
  • 같은 패키지 내에 있어야하며 sealed 키워드를 사용한다.
  • 예시
    public sealed class Animal permits Lion, Bird {
    }
    
    public final class Lion extends Animal {
    }
    
    public final class Bird extends Animal {
    }

 

3. Switch Expression

  • 람다식 구문이 가능하다.
  • yield 예약어를 이용해 리턴 가능하다.
  • 예시
    switch (type) {
      case CHARGE -> currentAmount + amount;
      case USE -> currentAmount - amount;
      default -> currentAmount;

 

4. Stream toList()

  • Stream 사용시 toList()를 통해 간단하게 리스트로 변환 가능하다.
  • 기존 Collectors.toList() 대신 toList() 로 사용 가능하며 이때는 불변 List로 리턴한다.
  • 참고)
    • 불변 List에 추가/삭제 작업을 하려면 new ArrayList<>(list) 를 사용해야한다.
    • 불변 List에 add(), remove() 등 수정 작업을 시도하면 UnsupportedOperationException이 발생한다.
  • 예시
    List<Integer> numbers = List.of(1, 2, 3, 4, 5);
    List<Integer> result = numbers.stream().filter(number -> number > 1).toList();

 

5. Text Block

  • Java 17에서는 Text Block을 제공해 여러 줄의 문자열을 쉽게 작성할 수 있다.
  • 큰 따옴표 세개로 감싸면 되며 (“ ””) 이를 통해 가독성이 좋아졌다.
  • 예시
    String message = """
                     {
                         "name": "H",
                         "type": "A",
                         "Description": "description"
                     }
                     """

 

728x90