열거형 클래스 (Enum class)
- 별도의 인자가 없는 열거형 클래스이다.
- [클래스 이름.name]으로 이름 값을 가져올 수 있습니다.
- [클래스 이름.ordinal]로 해당 값이 몇 번째에 있는지 순서 값을 가져올 수 있습니다.
- 인자가 있는 열거형 클래스인 경우 각 열거 값들을 표현하는 방식을 다채롭게 할 수 있습니다.
// 인자 없는 enum class
enum class Animal {
DOG, CAT, PANDA
}
fun main() {
val animalEnum: Animal = Animal.CAT
println("${animalEnum.name}...${animalEnum.ordinal}")
val animalEnum2: Array<Animal> = Animal.values()
for (i in animalEnum2.indices) {
print("${animalEnum2[i].name} \n")
}
}
/* 결과
CAT...1
DOG
CAT
PANDA
*/
// 인자 있는 enum class
enum class Animal(val age: Int) {
DOG(5), CAT(10), PANDA(15)
}
fun main() {
val animalEnum: Animal = Animal.CAT
println("name : ${animalEnum.name}, age: ${animalEnum.age}...${animalEnum.ordinal}")
}
/* 결과
name : CAT, age: 10...1
*/
Sealed class
- 부모 클래스의 상속을 받는 자식 클래스의 종류를 제한하는 클래스입니다.
- sealed class에 정의된 하위 클래스 외의 다른 하위 클래스는 존재하지 않는 것을 컴파일러에게 알려줍니다.
- sealed class로 선언하고 사용합니다.
- 생성자는 private로 한정됩니다.
- sealed class와 그 하위 클래스는 동일한 파일에 정의되어야 합니다. (서로 다른 파일에서 정의 불가능)
- 하위 클래스는 class, data class, object로 정의할 수 있습니다.
// sealed class를 선언 후 아래에 object 클래스 선언
sealed class Color {
object Red: Color()
object Green: Color()
object Blue: Color()
}
fun main() {
val color: Color = Color.Red
val select = when(color) {
is Color.Red -> "Red Color"
is Color.Green -> "Green Color"
is Color.Blue -> "Blue Color"
}
println(select)
}
/* 결과
Red Color
*/
Enum class vs Sealed class
공통점
- 타입을 제한할 때 사용합니다.
차이점
- enum class은 하나의 객체만 만들 수 있습니다.
- sealed class는 객체를 여러개 생성할 수 있습니다.
'Kotlin' 카테고리의 다른 글
[Kotlin] 가시성 지시자 (0) | 2023.05.26 |
---|---|
[Kotlin] 다양한 클래스(3) (0) | 2023.05.26 |
[Kotlin] 데이터 클래스 및 다양한 클래스(1) (0) | 2023.05.25 |
[Kotlin] 추상 클래스 (0) | 2023.05.25 |
코틀린 정적 변수 (0) | 2023.03.14 |