enum 클래스
상수(constant
)의 집합인 클래스이다.
- 각 열거형 상수는 객체이며
,
로 구분한다. - 인스턴스 생성과 상속을 방지하여 상수값의 타입 안정성(안전한 열거형 구현,
type-safe
enums
)을 보장한다.
fun main() {
println(Color.RED)
}
enum class Color {
RED, GREEN, BLUE
}
// RED
각각의 enum
은 enum class
의 인스턴스이기 때문에 특정 값으로 초기화할 수 있다.
fun main() {
println(Color.RED)
println(Color.RED.name)
println(Color.RED.strRgb)
println(Color.RED.hexRgb)
}
enum class Color(val strRgb: String, val hexRgb: Int) {
RED("#f00", 0xFF0000),
GREEN("#0f0", 0x00FF00),
BLUE("#00f", 0x0000FF),
}
// RED
// RED
// f00
// ff0000
enum 의 형태
enum
은 자신의 익명 클래스와 함수를 선언할 수 있으며 enum
에 선언한 추상 메소드를 오버라이딩할 수 있다.
fun main() {
println(Run.START.signal())
println(Run.END.signal())
}
enum class Run {
START {
override fun signal() = "STRATING":
},
END {
override fun signal() = "ENDING":
};
abstract fun signal(): Run
}
// STRATING
// ENDING
enum
은 상속 대신 interface
를 사용한다.
모든 항목을 위한 하나의 인터페이스 멤버를 가지거나 익명 클래스 안에 있는 각각의 항목들이 인터페이스 멤버를 가진다.
import java.util.function.BinaryOperator
import java.util.function.IntBinaryOperator
fun main() {
println(Operator.PLUS.apply(1, 1))
println(Operator.MINUS.apply(1, 1))
}
enum class Operator : BinaryOperator<Int>, IntBinaryOperator {
PLUS {
override fun apply(n1: Int, n2: Int): Int {
return n1.plus(n2)
}
},
MINUS {
override fun apply(n1: Int, n2: Int): Int {
return n1.minus(n2)
}
};
override fun applyAsInt(n1: Int, n2: Int) = apply(n1, n2)
}
// 2
// 0
enum methods
enum
에 정의된 상수들의 리스트를 가져오거나 열거형 이름으로 상수를 받아올 수 있다.
enum
의 모든 상수들은.name
으로 이름을 받아오는 프로퍼티를 가지고 있다.enum
의 모든 상수들은.ordinal
으로 위치를 받아오는 프로퍼티를 가지고 있다.
// 인자로 전달된 문자열과 일치하는 열거체의 상수를 반환
EnumClass.valueOf(value: String): EnumClass
// 열거체의 모둔 상수를 저장한 배열을 생성하여 반환
EnumClass.values(): Array<EnumClass>
fun main() {
println(Color.valueOf("RED").name)
println(Color.values().joinToString())
}
enum class Color{
RED, GREEN, BLUE
}
// RED
// RED, GREEN, BLUE