타입 계층을 위한 봉인된 클래스
어떤 클래스가 타입을 확장할 수 있는지 제한합니다 — 완전한 switch를 가능하게 합니다.
코드 비교
✕ Java 8
// Anyone can extend Shape
public abstract class Shape { }
public class Circle extends Shape { }
public class Rect extends Shape { }
// unknown subclasses possible
✓ Java 17+
public sealed interface Shape
permits Circle, Rect {}
public record Circle(double r)
implements Shape {}
public record Rect(double w, double h)
implements Shape {}
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
제어된 계층
허가된 하위 타입만 확장할 수 있습니다 — 예상치 못한 서브클래스 없음.
완전한 매칭
컴파일러가 switch가 모든 케이스를 처리하는지 검증합니다.
대수적 데이터 타입
합 타입을 자연스럽게 모델링합니다 — 봉인된 클래스 + 레코드 = Java의 ADT.
이전 방식
개방 계층
모던 방식
sealed permits
JDK 버전
17
난이도
중급
JDK 지원
타입 계층을 위한 봉인된 클래스
사용 가능
JDK 17 LTS (2021년 9월) 이후 널리 사용 가능
동작 원리
봉인된 클래스는 닫힌 하위 타입 집합을 정의합니다. 컴파일러는 모든 가능한 케이스를 알고 있어 default 분기 없이 완전한 패턴 매칭을 가능하게 합니다. 레코드와 결합하면 대수적 데이터 타입을 모델링합니다.
관련 문서