PHpullh
학습 라이브러리/Java/sealed 클래스 심화

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 중 하나여야 합니다.