자바(SE)
[JDK] 버전별 특징 - JDK17
은서파
2023. 5. 23. 14:47
이번 포스트에서는 간만에 만나는 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..
}