KOTLIN

[KOTLIN] SEALED CLASS

집한구석 2022. 7. 27. 22:26
728x90

Sealed 클래스

  • 자기 자신이 추상클래스이고, 자신을 상속받는 여러 서브 클래스들을 가질 수 있음
  • enum 클래스와 달리 상속을 지원하여, 상속을 활용하여 구현이 가능
  • 자신을 상속받는 서브 클래스의 종류를 제한할 수 있음

Sealed 클래스 특징

  • 서브 클래스들은 반드시 같은 파일 내에 선언 되어야함
  • sealed 클래스는 기본적으로 추상클래스임
  • sealed 클래스는 private 생성자를 기본적으로 가지게 됨

Sealed 클래스 예시

sealed class Color {
    data class Red(val r: Int, val g: Int, val b: Int) : Color()
    data class Orange(val r: Int, val g: Int, val b: Int) : Color()
    data class Yellow(val r: Int, val g: Int, val b: Int) : Color()
}

fun main() {
    val color: Color = Color.Red(255, 0, 20)
    when (color) {
        is Color.Red -> println("빨강")
        is Color.Orange -> println("주황")
        is Color.Yellow -> println("노랑")
    }
}
  • 서브 클래스들은 class, data class, object 모두 가능함
  • 같은 파일 내에서 선언되어야함

Sealed 클래스 이점

  • sealed 클래스의 서브 클래스 각각에 여러개의 인스턴스 생성이 가능함
  • 계층을 생성할 수 있음 (enum 확장판)