Enum 클래스

enum class Direction {
  NORTH, SOUTH, WEST, EAST
}

각 열거형 상수는 객체이다

초기화

각 enum은 enum 클래스의 인스턴스이므로, 초기화 가능

enum class Color(val rgb: Int) {
        RED(0xFF0000),
        GREEN(0x00FF00),
        BLUE(0x0000FF)
}

무명 클래스

Enum 상수는 무명 클래스를 선언 가능

enum class ProtocolState {
    WAITING {
        override fun signal() = TALKING
    },

    TALKING {
        override fun signal() = WAITING
    };

    abstract fun signal(): ProtocolState
}

각자 대응하는 메소드, 오버라이드한 기본 메소드도뿐만 아니라 선언 가능

enum 상수 사용하여 작업

enum 클래스는 정의된 enum 타입 상수를 나열, 이름으로 enum 타입 상수를 얻을 수 있다

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

valueOf() 메소드에 지정한 enum 상수가 없는 경우 IllegalArgumentException 예외 발생

Kotlin 1.1 부터 enumValues<T>()enumValueOf<T>() 함수를 사용하여 enum 클래스의 상수에 접근 가능

enum class RGB { RED, GREEN, BLUE }

inline fun <reified T : Enum<T>> printAllValues() {
    print(enumValues<T>().joinToString { it.name })
}

printAllValues<RGB>() // RED, GREEN, BLUE 출력

모든 enum 상수는 상수의 이름과 enum 클래스에 정의된 순서를 구할 수 있는 프로퍼티를 가진다

val name: String
val ordinal: Int

enum 클래스로 정의된 순서를 자연 순서로서, Comparable 인터페이스를 구현하고 있다

results matching ""

    No results matching ""