Study Record

[Kotlin] Enum Class 본문

안드로이드/Kotlin

[Kotlin] Enum Class

초코초코초코 2023. 8. 10. 17:19
728x90

 

😶 Enum Class 개요

enum class TestEnum {
    PLUS, TIME, MIN;
}

fun main() {
    for(value in TestEnum.values()) println(value.name)
    
    // kotlin 1.9.0 일 경우
    for(value in TestEnum.entries) println(value.toString())
}

코틀린에서 enum 은 상수 집합을 보유할 수 있는 데이터 타입이다. class 앞에 enum 키워드를 추가하는 것으로 enum class 를 정의할 수 있고 클래스 내 열거 상수를 쉽표로 구분한다.

enum class Direction {
    NORTH, SOUTH, WEST, EAST
}

 

예시 코드의 NORTH, SOUTH 등의 열거 상수들은 전부 "객체"이다.

 

 

😶 익명 클래스

열거 상수들은 기본 메서드를 재정의하는 것 뿐만 아니라 해당 메서드를 사용하여 자신의 익명 클래스를 선언할 수 있다.

enum class ProtocolState {
    WAITING {
        override fun signal() = TALKING
    },

    TALKING {
        override fun signal() = WAITING
    };

    abstract fun signal(): ProtocolState
}

열거 상수의 정의의 마지막은 세미클론으로 구분한다.

 

 

😶 enum class 의 interface 구현

enum Class 에도 interface 를 상속받을 수 있다. 열거 상수들 자체가 객체이므로 기본 메서드들도 객체에서 호출할 수 있다.

interface TestInterface {
    abstract fun apply(t: Int, u: Int)
}

enum class TestEnum : TestInterface {
    PLUS, TIME;

    override fun apply(t: Int, u: Int) {
        println("$t + $u = ${t + u}")
    }
}

fun main() {
    TestEnum.PLUS.apply(3, 5)
}

 

열거 상수 자체에 메서드를 재정의할 수 있다.

interface TestInterface {
    abstract fun apply(t: Int, u: Int)
}

enum class TestEnum : TestInterface {
    PLUS {
        override fun apply(t: Int, u: Int) {
            println("$t + $u = ${t + u}")
        }
    },
    TIME {
        override fun apply(t: Int, u: Int) {
            println("$t * $u = ${t * u}")
        }
    };
}

fun main() {
    TestEnum.PLUS.apply(3, 5)
    TestEnum.TIME.apply(3, 5)
}

 

 

😶 enum class 사용하기

for 문과 함께 열거 상수들을 접근할 수 있다.

enum class TestEnum {
    PLUS, TIME, MIN;
}

fun main() {
    for(value in TestEnum.values()) println(value.name)
    
    // kotlin 1.9.0 일 경우
    for(value in TestEnum.entries) println(value.toString())
}

 

enum class 의 이름과 position 을 얻을 수 있다. valueOf() 로 검색할 수 있다.

enum class TestEnum {
    PLUS, TIME, MIN;
}

fun main() {
    TestEnum.PLUS.name
    TestEnum.PLUS.ordinal
    
    println(TestEnum.valueOf(TestEnum.MIN.name))
}

 

 

 

 

Enum classes | Kotlin

 

kotlinlang.org

 

 

 

728x90