자바(SE)

[JDK] 버전별 특징 - JDK17

  • -

이번 포스트에서는 간만에 만나는 LTS인 JDK17버전에 대해 알아보자.

 

문법적 변화

 

Sealed Classes

Sealed Class는 JDK 15버전에 소개되어 17버전에서 사용할 수 있게 되었다. 봉인된 클래스는 특정 클래스에게만 상속할 수 있게 하는 기능이다.

봉인된 class(interface)를 선언하기 위해서는 sealed 키워드를 사용하고 구현(상속)을 허락하는 클래스는 permits뒤에 나열한다.

// Vehicle은 Car나 Bike만 상속받도록 허락된 봉인된 인터페이스이다.
public sealed interface Vehicle permits Car, Bike  { }

public final class Car implements Vehicle { }
// permit 되지 않은 클래스는 구현할 수 없음
//public final class Room implements Vehicle {}
public non-sealed class Bike implements Vehicle {}

sealed를 구현한 클래스에는 3가지 키워드를 선언부에 반드시 포함해야 한다.

  • sealed - 여전히 봉인된 클래스이며 상속받기 위해서는 permits에 대상이 나열되어야 한다.
  • final - 더 이상 상속받을 수 없는 클래스이다.
  • non-sealed - 봉인이 해제된 클래스로 자유롭게 상속시킬 수 있다.

봉인된 클래스를 썼을 때 장점은 permits에서 허락한 대상 말고는 빠질 곳이 없기 때문에 타입을 추정할 때 유리하다. 아래의 경우 v의 타입이 Bike인지, Car인지만 보면 다 본것이다.

Vehicle v = new Bike();

if(v instanceof Bike bike){
    // do something..
}else if(v instanceof Car car){
    // do something..
}

 

'자바(SE)' 카테고리의 다른 글

[java]try~with~resource의 close 호출 시점  (0) 2024.03.14
S.O.L.I.D.  (0) 2024.01.09
[JDK] 버전별 특징 - JDK16  (0) 2023.05.23
[JDK] 버전별 특징 - JDK15  (0) 2023.05.23
[JDK] 버전별 특징 - JDK14  (0) 2023.05.23
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.