프로그래밍/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
열거 형 상수는 또한
인터페이스를 구현하며 자연 순서는 열거 형 클래스에 정의 된 순서입니다.
반응형