JAVA · 객체지향
sealed 클래스 심화
Java 17의 sealed 클래스로 상속 계층을 제한하고 패턴 매칭을 활용합니다.
객체지향고급sealedpermitsnon-sealed패턴매칭
핵심 설명
Java 17의 sealed 클래스로 상속 계층을 제한하고 패턴 매칭을 활용합니다.
Java code
// sealed: 허용된 하위 클래스만 상속 가능
public sealed interface Shape
permits Circle, Rectangle, Triangle {
double area();
}
// final: 더 이상 상속 불가
record Circle(double radius) implements Shape {
public double area() { return Math.PI * radius * radius; }
}
// final (record는 암묵적 final)
record Rectangle(double w, double h) implements Shape {
public double area() { return w * h; }
}
// non-sealed: 자유롭게 상속 가능
non-sealed class Triangle implements Shape {
double base, height;
Triangle(double base, double height) {
this.base = base; this.height = height;
}
public double area() { return 0.5 * base * height; }
}
class Main {
// 패턴 매칭과 결합 — exhaustive switch
static String describe(Shape s) {
return switch (s) {
case Circle c -> "원(r=" + c.radius() + ")";
case Rectangle r -> "사각(w=" + r.w() + ")";
case Triangle t -> "삼각";
// default 불필요! sealed이므로 컴파일러가 완전성 검증
};
}
}학습 팁
sealed + switch 패턴 매칭을 함께 사용하면 default 없이 완전한 분기를 보장합니다. 새 하위 타입 추가 시 컴파일러가 누락된 케이스를 알려줍니다.
주의할 점
permits에 나열한 클래스는 반드시 final, sealed, 또는 non-sealed 중 하나여야 합니다.
자주 묻는 질문
sealed 클래스 심화란 무엇인가요?
Java 17의 sealed 클래스로 상속 계층을 제한하고 패턴 매칭을 활용합니다.
sealed 클래스 심화 학습 시 주의할 점은 무엇인가요?
permits 에 나열한 클래스는 반드시 final , sealed , 또는 non-sealed 중 하나여야 합니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.