프로그래밍/kotlin

코틀린 - Enum 클래스

Ericlee 2021. 7. 13. 13:13
반응형

enum 클래스의 가장 기본적인 사용법은 type-safe enum을 구현하는 것입니다 :

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

각 열거 형 상수는 하나의 객체입니다. Enum 상수는 쉼표로 구분됩니다.

초기화

각 열거 형은 enum 클래스의 인스턴스이기 때문에 다음과 같이 초기화 할 수 있습니다.

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

익명 클래스

열거 형 상수는 또한 자신의 익명 클래스를 선언 할 수 있습니다.

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

    TALKING {
        override fun signal() = WAITING
    };

    abstract fun signal(): ProtocolState
}

해당 메소드를 사용하여 기본 메소드를 대체 할 수 있습니다. enum 클래스가 멤버를 정의하는 경우 자바에서와 마찬가지로 멤버 정의에서 열거 형 상수 정의를 세미콜론으로 구분해야합니다.

열거 형 상수로 작업하기

자바에서와 마찬가지로 코틀린의 enum 클래스는 정의 된 열거 형 상수를 나열하고 그 이름으로 열거 형 상수를 가져올 수있는 합성 메소드를 가지고 있습니다. 이러한 메소드의 서명은 다음과 같습니다 (enum 클래스의 이름이 있다고 가정 

EnumClass

).

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

 

valueOf()

방법은을 던져 

IllegalArgumentException

지정된 이름이 클래스에 정의 된 열거 형 상수 일치하지 않는 경우.코틀린1.1부터는 

enumValues<T>()

and 

enumValueOf<T>()

함수를 사용하여 일반적인 방식으로 enum 클래스의 상수에 액세스 할 수 있습니다 .

enum class RGB { RED, GREEN, BLUE }

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

printAllValues<RGB>() // prints RED, GREEN, BLUE

모든 enum 상수에는 enum 클래스 선언에서 이름과 위치를 가져 오는 속성이 있습니다.

val name: String
val ordinal: Int

열거 형 상수는 또한 

Comparable

 인터페이스를 구현하며 자연 순서는 열거 형 클래스에 정의 된 순서입니다.

반응형