JAVA · 기초 문법
Sealed Class & Pattern Matching (Java 17/21)
대수적 데이터 타입을 Java에서 구현하는 Sealed Class와 패턴 매칭.
기초 문법중급Sealed classPattern MatchingJava 21switchinstanceof
핵심 설명
대수적 데이터 타입을 Java에서 구현하는 Sealed Class와 패턴 매칭.
Java code
// Sealed class (Java 17+)
public sealed interface Shape
permits Circle, Rectangle, Triangle {}
public record Circle(double radius) implements Shape {}
public record Rectangle(double w, double h) implements Shape {}
public record Triangle(double base, double height) implements Shape {}
// Pattern Matching for switch (Java 21)
public class PatternMatching {
static double area(Shape shape) {
return switch (shape) {
case Circle c -> Math.PI * c.radius() * c.radius();
case Rectangle r -> r.w() * r.h();
case Triangle t -> 0.5 * t.base() * t.height();
// else 불필요 — sealed로 완전성 보장
};
}
// Guarded patterns (Java 21)
static String classify(Shape shape) {
return switch (shape) {
case Circle c when c.radius() > 10 -> "대형 원";
case Circle c -> "소형 원";
case Rectangle r when r.w() == r.h() -> "정사각형";
case Rectangle r -> "직사각형";
case Triangle t -> "삼각형";
};
}
// instanceof Pattern Matching (Java 16+)
static void printInfo(Object obj) {
if (obj instanceof String s && !s.isBlank()) {
System.out.println("문자열 길이: " + s.length());
} else if (obj instanceof Integer i && i > 0) {
System.out.println("양의 정수: " + i);
}
}
public static void main(String[] args) {
Shape[] shapes = {
new Circle(5), new Rectangle(3, 4), new Triangle(6, 8)
};
for (var s : shapes) {
System.out.printf("%s → %.2f%n", classify(s), area(s));
}
printInfo("Hello");
printInfo(42);
}
}학습 팁
Sealed class + pattern matching은 Kotlin의 sealed class + when과 동일한 역할을 합니다. Java 21에서 정식 기능이 됐습니다.
주의할 점
switch에서 Sealed class를 사용할 때 permits 타입 중 하나라도 빠지면 컴파일 에러가 납니다. 이것이 exhaustive 검사의 강점입니다.
자주 묻는 질문
Sealed Class & Pattern Matching (Java 17/21)란 무엇인가요?
대수적 데이터 타입을 Java에서 구현하는 Sealed Class와 패턴 매칭.
Sealed Class & Pattern Matching (Java 17/21) 학습 시 주의할 점은 무엇인가요?
switch 에서 Sealed class를 사용할 때 permits 타입 중 하나라도 빠지면 컴파일 에러가 납니다. 이것이 exhaustive 검사의 강점입니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.