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
'Android > Kotlin' 카테고리의 다른 글
Jetpack Compose 에서 ProgressBar 구현하기 (0) | 2024.02.05 |
---|---|
Android Jetpack Hilt 를 이용하여 의존성 주입하기 (0) | 2024.01.22 |
Android Exoplayer 현재 재생 중인 Stream 의 Format 확인 방법 (0) | 2024.01.12 |
Android 배워보자 Compose! -(4) (0) | 2024.01.12 |
Android 배워보자 Compose! -(3) (3) | 2024.01.11 |