본문 바로가기
Android/Kotlin

Android Kotlin 의 Enum class

by wannagohome97 2024. 1. 17.

Enum? 열거형?

Kotlin 에는 (Java 에도 있습니다) Enum 이라는 형태의 class 가 있는데 한국어로 하면 "열거형" 클래스 입니다.

저 같은 경우는 프로젝트에서 주로 아래와 같을 때 사용합니다

  • 자주 사용되는 값이며
  • 네이밍(이름) 이 별도로 존재하고
  • 해당 네이밍에 매핑되는 value 가 있을 때

아래 링크는 Enum class 에 관한 Kotlin 의 공식 문서입니다.

 

Enum classes | Kotlin

 

kotlinlang.org

 

대표적인 예시 코드를 하나 가져와 보겠습니다.

enum class VideoResolution(
    val width: Int, val height: Int
) {
    NONE(-1, -1) {
        override fun getTypicalName(): String {
            return "-"
        }
    },
    STANDARD_DEFINITION(720, 480) {
        override fun getTypicalName(): String {
            return "SD"
        }
    },
    HIGH_DEFINITION(1280, 720) {
        override fun getTypicalName(): String {
            return "HD"
        }
    },

    FULL_HIGH_DEFINITION(1920, 1080) {
        override fun getTypicalName(): String {
            return "FHD"
        }
    },
    ULTRA_HIGH_DEFINITION(3840, 2160) {
        override fun getTypicalName(): String {
            return "UHD"
        }
    },
    FOUR_K(4096, 2160) {
        override fun getTypicalName(): String {
            return "4K"
        }
    };
    
    abstract fun getTypicalName(): String
    
}

 

Class 내부의 모든 상수들은 Object 이며 각 상수들에는 작성되어있는 필드명인 name 과 각 상수가 몇 번째에 적혀있는지에 대한 index 인 ordinal 을 사용할 수 있습니다.

또한, 위와 같이 내부에 익명 클래스를 선언할 수도 있습니다.

 

이를 활용한 코드는 아래와 같습니다

val resolution = VideoResolution.HIGH_DEFINITION
println("${resolution.ordinal}.${resolution.getTypicalName()}(${resolution.name})")

// -> 2.HD(HIGH_DEFINITION)

 

또한 Enum class 의 valueOf() 와 values() 를 이용하여 Map 또는 List 처럼 활용할 수 있는데

이에 대한 예시 코드는 아래와 같습니다.

val fHd: VideoResolution = VideoResolution.valueOf("FULL_HIGH_DEFINITION")
val videoResolutions: Array<VideoResolution> = VideoResolution.values()

println(fHd)
// -> FULL_HIGH_DEFINITION

println(videoResolutions.joinToString())
// -> NONE, STANDARD_DEFINITION, HIGH_DEFINITION, FULL_HIGH_DEFINITION, ULTRA_HIGH_DEFINITION, FOUR_K