enum 클래스

상수(constant)의 집합인 클래스

enum 클래스

enum 클래스


상수(constant)의 집합인 클래스이다.

  • 각 열거형 상수는 객체이며 , 로 구분한다.
  • 인스턴스 생성과 상속을 방지하여 상수값의 타입 안정성(안전한 열거형 구현, type-safe enums)을 보장한다.
fun main() {
    println(Color.RED)
}

enum class Color {
    RED, GREEN, BLUE
}


// RED


각각의 enumenum 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
essential