Enum class
열거형 클래스는 형식이 안전한 열거형을 구현하는 것입니다.
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
내부의 각각의 상수들은 오브젝트이다.
각 열거형 상수는 개체이다. 열거형 상수는 쉼표로 구분된다.
열거형 클래스는 다음과 같이 초기화할 수 있다.
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
Anonymous classes
열거형 상수는 해당 메서드와 재정의 기본 메서드를 사용하여 고유한 익명 클래스를 선언할 수 있습니다.
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
enum 클래스가 멤버를 정의하는 경우 세미콜론으로 멤버 정의에서 상수 정의를 구분합니다.
enum class에서 interface 구현
enum class는 interface를 구현할 수 있지만(클래스에서 파생될 수는 없다.) 모든 항목에 대한 인터페이스 멤범의 공통 구현 또는 익명클래스 내의 각 항목에 대한 개별 구현을 제공한다. 구하려는 interface를 다음과 같이 enum class 선언에 추가하면 된다.
enum class IntArithmetics : BinaryOperator<Int>, IntBinaryOperator {
PLUS {
override fun apply(t: Int, u: Int): Int = t + u
},
TIMES {
override fun apply(t: Int, u: Int): Int = t * u
};
override fun applyAsInt(t: Int, u: Int) = apply(t, u)
}
Working with enum constants
kotlin의 열거형 클래스에는 정의된 열거형 상수를 나열하고 이름으로 열거형 상수를 가져오는 합성 방법이 있습니다. 이러한 메서드의 서명은 다음과 같다. (enum 클래스의 이름을 EnumClass라고 가정)
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
valueOf() 메서드는 지정된 IllegalArgumentException 이름이 클래스에 정의된 열거형 상수와 일치하지 않는 경우 오류를 발생시킵니다.
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>() // prints RED, GREEN, BLUE
모든 enum 상수에는 enum 클래스 선언에서 이름과 위치(0부터 시작)를 얻기 위한 속성이 있습니다.
val name: String
val ordinal: Int
참고
https://kotlinlang.org/docs/enum-classes.html#anonymous-classes
코틀린 공식 문서를 참고하였습니다.
'Programming Language > Kotlin' 카테고리의 다른 글
[Kotlin] Scope Function 정리 (let, run, with, apply, also) (0) | 2023.01.01 |
---|---|
[Kotlin] Inline class란 (0) | 2023.01.01 |
[Kotlin] Sealed Class 란 (0) | 2023.01.01 |
[Kotlin] Data Class란 (0) | 2022.12.31 |
[Kotlin] 코틀린으로 앱 개발시 자바보다 이점 (0) | 2022.08.31 |