(Kotlin/코틀린) enum class 완전 정리

개요


1. enum class 기본 사용

enum class Status {
    READY,
    RUNNING,
    DONE
}

val status = Status.READY

2. enum은 사실 객체다

각 enum 값은 단순 값이 아니라 객체입니다.

println(Status.READY.name)   // READY
println(Status.READY.ordinal) // 0
프로퍼티 설명
name enum 이름
ordinal 순서 (0부터 시작)

3. enum에 프로퍼티 추가

enum class Status(val code: Int) {
    READY(0),
    RUNNING(1),
    DONE(2)
}

println(Status.READY.code) // 0

4. enum에 함수 추가

enum class Status {
    READY,
    RUNNING,
    DONE;

    fun isFinished(): Boolean {
        return this == DONE
    }
}

5. enum별로 다른 로직 정의

enum class Operation {
    ADD {
        override fun apply(a: Int, b: Int) = a + b
    },
    SUB {
        override fun apply(a: Int, b: Int) = a - b
    };

    abstract fun apply(a: Int, b: Int): Int
}

6. when 과 함께 사용하는 것이 핵심

fun handle(status: Status) {
    when (status) {
        Status.READY -> {}
        Status.RUNNING -> {}
        Status.DONE -> {}
    }
}

7. enum vs sealed class

항목 enum sealed class
상태 개수 고정 확장 가능
데이터 포함 제한적 자유
타입 계층 단일 상속 구조
사용 목적 단순 상태 복잡한 상태
sealed class Result {
    object Loading : Result()
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
}


Related Posts