https://sundaland.tistory.com/73
인터페이스가 특정 클래스만 상속하거나 구현할 수 있도락 제한하는 기능을 제공한다. 이를 통해 인터페이스를 상속하거나 구현할 수 있는 클래스들을 명시적으로 지정함으로써, 보다 강력한 캡슐화와 제어를 가능하게 한다.
1. 제한된 상속
- sealed로 선언된 인터페이스는 premits 키워드를 사용하여 상속이나 구현할 수 있는 클래스 또는 인터페이스를 명시한다.
- sealed interface를 구현할 수 있는 클래스들은 반드시 같은 모듈 또는 패키지에 있어야 하며, 명시적으로 상속을 허용한 클래스만 가능하다.
2. 하위 클래스의 종류
- final : 더 이상 다른 클래스에서 상속할 수 없는 클래스이다.
- sealed : 추가적인 하위 클래스를 제한할 수 있는 클래스이다.
- non-sealed : 상속이 제한되지 않는 클래스이다.
public sealed interface Shape permits Circle, Rectangle, Square {
double area();
}
public final class Circle implements Shape {
private final double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
}
public final class Rectangle implements Shape {
private final double width;
private final double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double area() {
return width * height;
}
}
public non-sealed class Square implements Shape {
private final double side;
public Square(double side) {
this.side = side;
}
@Override
public double area() {
return side * side;
}
}
- 타입 계층의 안정성 : sealed 인터페이스를 사용하면, 상속 구조를 보다 엄격하게 제어할 수 있어 코드의 유지보수성과 안정성이 향상된다.
- 패턴 매칭 : 자바에서 도입된 패턴 매칭 기능과 잘 맞아, switch 문에서 각 케이스가 완전히 다루어졌는지 컴파일 타입에 검증할 수 있다.
sealed 인터페이스는 이러한 제어와 안정성을 통해 코드의 일관성을 유지하고 예측 가능한 계층 구조를 만들고자 하는 상황에서 유용하게 사용할 수 있다.
'Reflection' 카테고리의 다른 글
Arrays and Enumerated Types (0) | 2024.08.21 |
---|---|
unqualified name (0) | 2024.08.20 |
type-safe proxy object (0) | 2024.08.20 |
Structuring method calls (0) | 2024.08.20 |
Members - Constructors (0) | 2024.08.20 |