728x90
- Sealed Class 정의와 용도
Sealed의 사전적 의미는 '봉인을 한' 이다
상속이 가능하도록 추상클래스를 만들까 하는데
(상속이 가능하도록 계층 구성을 하고 싶은데)
외부에서는 이 클래스를 상속받지 못하도록 하위 클래스를 봉인할 때 사용한다
컴파일 타임 때 하위 클래스의 타입을 모두 기억한다 (enum 클래스와 동일)
즉, 런타임 때 클래스 타입이 추가될 수 없다
하위 클래스는 같은 패키지에 있어야 한다
- Enum Class와 Sealed Class의 차이점
- Sealed Class는 클래스를 상속받을 수 있다
- Sealed Class의 하위 클래스는 멀티 인스턴스가 가능하다
- 구현 예시
sealed class HyundaiCar(
val name: String,
val price: Long
)
class Avante : HyundaiCar("아반떼", 1_000L)
class Sonata : HyundaiCar("소나타", 2_000L)
class Grandeur : HyundaiCar("그랜저", 3_000L)
sealed class로 선언된 것을 제외하면
그냥 추상 클래스와 큰 차이가 없어보인다
선언된 함수가 있었다면 해당 함수도 아래 하위 클래스에서 override 했어야 할 것이다
여기서 주목할 점은
컴파일 타임 때 하위 클래스의 타입을 모두 기억한다는 것
즉, 런타임 때 클래스 타입이 추가될 수 없다
따라서 enum 클래스와 마찬가지로 sealed 클래스에서도 when을 함께 활용하면 좋다
fun main() {
handleCar(Avante())
}
private fun handleCar(car: HyundaiCar) {
when (car) {
is Avante -> TODO()
is Sonata -> TODO()
is Grandeur -> TODO()
}
}
추상화가 필요한 DTO(Entity)에 sealed class를 활용하면 좋다
728x90
'개발 지식 > 자바 개발자를 위한 코틀린 입문' 카테고리의 다른 글
자바 개발자를 위한 코틀린 입문 - 코틀린 함수형 프로그래밍 (0) | 2023.08.10 |
---|---|
자바 개발자를 위한 코틀린 입문 - 다양한 함수 (0) | 2023.08.10 |
자바 개발자를 위한 코틀린 입문 - 상속 방법과 주의점 (0) | 2023.08.09 |
자바 개발자를 위한 코틀린 입문 - 동일성/동등성 비교 방법 (0) | 2023.08.07 |
자바 개발자를 위한 코틀린 입문 - Kotlin의 특이한 타입 3가지 (0) | 2023.08.07 |