sealed interface
2023. 5. 8. 14:13ㆍHigh Level Programming Language/Reflection
sealed interface
는 Java 15에서 도입된 기능으로, 인터페이스가 특정 클래스들만을 상속하거나 구현할 수 있도록 제한하는 기능을 제공합니다. 이를 통해 인터페이스를 상속하거나 구현할 수 있는 클래스들을 명시적으로 지정함으로써, 보다 강력한 캡슐화와 제어를 가능하게 합니다.
주요 특징:
- 제한된 상속:
sealed
로 선언된 인터페이스는permits
키워드를 사용하여 상속이나 구현할 수 있는 클래스 또는 인터페이스를 명시합니다.sealed interface
를 구현할 수 있는 클래스들은 반드시 같은 모듈 또는 패키지에 있어야 하며, 명시적으로 상속을 허용한 클래스만 가능합니다.
- 하위 클래스의 종류:
sealed interface
를 구현하는 클래스는 세 가지로 구분될 수 있습니다: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
인터페이스를 사용하면, 상속 구조를 보다 엄격하게 제어할 수 있어 코드의 유지보수성과 안정성이 향상됩니다. - 패턴 매칭: Java에서 도입된 패턴 매칭 기능과 잘 맞아,
switch
문에서 각 케이스가 완전히 다루어졌는지 컴파일 타임에 검증할 수 있습니다.
sealed
인터페이스는 이러한 제어와 안정성을 통해 코드의 일관성을 유지하고 예측 가능한 계층 구조를 만들고자 하는 상황에서 유용하게 사용할 수 있습니다.
'High Level Programming Language > Reflection' 카테고리의 다른 글
클래스 로딩과 관련된 제약 사항 (0) | 2023.05.19 |
---|---|
Proxy Target Class 조건 (0) | 2023.05.17 |
Structuring method calls (0) | 2023.05.02 |
type-safe proxy object (0) | 2023.05.02 |
Java Dynamic Proxy Classes (0) | 2023.04.28 |