Java 17은 2021년 9월에 출시된 LTS(Long Term Support) 버전으로 Java 17에서 추가된 기능과 특징에 대해 정리해보고자한다. 주요 특징에 대해 정리하면 다음과 같다.
- Record
- Sealed Class
- Switch Expression
- Stream toList()
- 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
'Java' 카테고리의 다른 글
[Java] 비동기 처리를 위한 CompletableFuture 완벽 가이드 (0) | 2025.03.06 |
---|---|
[Java] Java 21 특징 (0) | 2025.01.31 |
[Java] Java 11 특징 (0) | 2025.01.30 |
[실전 자바 - 기본편] 다형성2 (0) | 2024.09.09 |
[실전 자바 - 기본편] 다형성1 (0) | 2024.09.09 |