[Kotlin] 3-9. enum 클래스
Enum 클래스
enum 클래스의 가장 기본적인 용도는 타입에 안전한 열거값을 구현하는 것이다
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
각 enum상수는 객체이며, 콤마로 구분
초기화
각 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클래스는 정의한 enum상수 목록을 구하거나 이름으로 enum상수를 구하는 메서드를 제공
이 메소드의 시그니처는 다음과 같다(enum클래스의 이름이 EnumClass라고 가정)
EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>
valueOf() 메서드는 지정한 이름에 해당하는 enum상수가 존재하지 않으면 IllegalArgumentException을 발생한다
모든 enum상수에는 enum클래스에 선언한 상수의 이름과 위치를 제공하는 프로퍼티가 존재
val name: String
val ordinal: Int
enum상수는 또한 Comparable인터페이스를 구현하고 있어서 enum클래스에 정의된 순서를 기준으로 비교할 수 있다