Enum class는 여러개의 값을 열거해서 사용할 수 있는 기능을 제공한다.
enum class Direction{
NORTH,SOUTH,WEST,EAST
}
Enum class 안의 상수들은 인스턴스이기 때문에 다음과 같이 초기화 할 수 있다.
enum class Color(val rgb: Int){
RED(0xFF000),GREEN(0xFF000),BLUE(0xFF000)
}
fun main() {
println(Color.RED.name)
println(Color.RED.rgb.toString(16))
}
RED
ff000
모든 Enum class의 최상위 class는 kotlin.Enum class이고, abstract class로 정의 되어있다.
public abstract class Enum<E : Enum<E>>(name: String, ordinal: Int): Comparable<E>
name: Enum의 이름
Ordinal: Enum 순서에 따른 인덱스
Enum Class는 abstract class이기 때문에, Enum 상수는 method와 anonymous class들 선언하고 기본 method를 override 할 수 있다.
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
enum class는 abstract class이기 때문에 직접적으로 상속할 수 없지만, 인터페이스를 구현하는 것은 가능하다.
interface Printable {
fun print()
}
enum class ProtocolState : Printable {
WAITING {
override fun print() {
println("Waiting state")
}
},
TALKING {
override fun print() {
println("Talking state")
}
},
DISCONNECTED {
override fun print() {
println("Disconnected state")
}
};
}
참고
https://kotlinlang.org/docs/enum-classes.html#working-with-enum-constants