Value class와 같이 소개된 Sealed interface 정리!
Sealed class에 어떤 한계가 있어서 Sealed interface가 나왔을까?
Sealed class는 특별한 form의 abstract class이다. 따라서, 하나의 sealed class만 상속받을 수 있다.
이런 한계를 극복하기 위해 더 유연한 Sealed interface가 소개되었다. 다만, interface의 특성상 common property와 function은 public visibility를 갖게 된다. 이런걸 원치 않는 경우가 아니라면 더 유연한 Sealed interface를 쓸 수 있게 되었다!
sealed
modifier를 interface에 사용 시 class에 사용한 것과 같은 방식으로 동작한다. 따라서, 다음과 같이 exhaustive when expression
을 작성할 수 있다.
sealed interface Polygon
class Rectangle: Polygon
class Triangle: Polygon
fun draw(polygon: Polygon) = when (polygon) {
is Rectangle -> // draw
is Triangle -> // draw
// else is not needed
}
Sealed interface의 구현은 컴파일 타임에 다 알게 된다. when 구문에서 모든 가능한 구현이 모두 커버되었기 때문에 정상적으로 빌드 된다!