Kotlin의 열거형 클래스
Kotlin의 열거형 클래스(enum class)는 고정된 상수 집합을 표현하는 강력한 도구입니다.
이 문서에서는 Kotlin 열거형 클래스의 다양한 사용법을 살펴보겠습니다.
기본 사용법 (Basic Usage)
열거형 클래스의 가장 기본적인 사용 사례는 타입 안전 열거형의 구현입니다:
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
각 열거형 상수는 객체이며, 쉼표로 구분됩니다.
열거형 클래스는 생성자와 프로퍼티를 가질 수 있습니다:
enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}
익명 클래스 (Anonymous Classes)
열거형 상수는 자체 메서드를 가진 익명 클래스를 선언할 수 있습니다:
enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}
열거형 클래스가 멤버를 정의하는 경우, 상수 정의와 멤버 정의를 세미콜론으로 구분해야 합니다.
인터페이스 구현 (Implementing Interfaces)
열거형 클래스는 인터페이스를 구현할 수 있습니다:
enum class IntArithmetics : BinaryOperator<Int>, IntBinaryOperator {
PLUS {
override fun apply(t: Int, u: Int): Int = t + u
},
TIMES {
override fun apply(t: Int, u: Int): Int = t * u
};
override fun applyAsInt(t: Int, u: Int) = apply(t, u)
}
이 예제에서 IntArithmetics
는 BinaryOperator<Int>
와 IntBinaryOperator
인터페이스를 구현합니다.
열거형 상수 작업 (Working with Enum Constants)
Kotlin의 열거형 클래스는 정의된 상수를 나열하고 이름으로 상수를 가져오는 synthetic 프로퍼티와 메서드를 제공합니다:
enum class RGB { RED, GREEN, BLUE }
fun main() {
for (color in RGB.entries) println(color.toString()) // RED, GREEN, BLUE 출력
println("The first color is: ${RGB.valueOf("RED")}") // "The first color is: RED" 출력
}
valueOf()
메서드는 지정된 이름이 클래스에 정의된 열거형 상수와 일치하지 않으면 IllegalArgumentException
을 발생시킵니다.
모든 열거형 상수는 name
과 ordinal
프로퍼티를 가집니다:
println(RGB.RED.name) // "RED" 출력
println(RGB.RED.ordinal) // 0 출력
제네릭 접근 (Generic Access)
enumEntries<T>()
함수를 사용하여 열거형 클래스의 상수에 제네릭하게 접근할 수 있습니다:
enum class RGB { RED, GREEN, BLUE }
inline fun <reified T : Enum<T>> printAllValues() {
println(enumEntries<T>().joinToString { it.name })
}
printAllValues<RGB>() // "RED, GREEN, BLUE" 출력
주의사항 및 최적화 팁
enumEntries<T>()
vsenumValues<T>()
: Kotlin 2.0.0부터enumEntries<T>()
가 도입되었으며, 성능상의 이점 때문에enumValues<T>()
대신 사용을 권장합니다.- 메모리 사용: 열거형 상수는 싱글톤 객체이므로 메모리 사용이 효율적입니다.
- 타입 안전성: 열거형 클래스는 컴파일 시점에 타입 안전성을 제공합니다.
- 확장성: 새로운 상수를 추가하거나 기존 상수를 수정할 때 주의가 필요합니다. 코드의 여러 부분에 영향을 줄 수 있습니다.
실제 사용 사례
- 상태 관리: 애플리케이션의 상태를 표현할 때 유용합니다.
enum class OrderStatus { PENDING, PROCESSING, SHIPPED, DELIVERED, CANCELLED }
- 설정 옵션: 제한된 설정 옵션을 표현할 때 사용할 수 있습니다.
enum class DisplayMode { LIGHT, DARK, SYSTEM }
- 에러 코드: 표준화된 에러 코드를 정의할 때 유용합니다.
enum class ErrorCode(val message: String) { NOT_FOUND("Resource not found"), UNAUTHORIZED("Unauthorized access"), SERVER_ERROR("Internal server error") }
Kotlin의 열거형 클래스는 고정된 상수 집합을 표현하는 강력하고 유연한 방법을 제공합니다. 기본적인 상수 나열부터 복잡한 동작을 가진 객체까지 다양한 용도로 사용할 수 있습니다. 타입 안전성, 코드 가독성, 유지보수성 향상 등 많은 이점을 제공하므로, 적절한 상황에서 활용하면 코드의 품질을 크게 향상시킬 수 있습니다.
하지만 열거형 클래스의 사용이 항상 최선의 선택은 아닙니다. 상수 집합이 자주 변경되거나 동적으로 결정되어야 하는 경우, 다른 접근 방식이 더 적합할 수 있습니다. 따라서 프로젝트의 요구사항과 특성을 고려하여 적절히 사용하는 것이 중요합니다.
Kotlin, 열거형클래스, EnumClass, 타입안전성, 상수, 익명클래스, 인터페이스구현, 코틀린문법, 안드로이드개발, 서버개발, 상태관리, 코드최적화, 객체지향프로그래밍, API설계, 에러처리
'개발&프로그래밍' 카테고리의 다른 글
[Kotlin] 객체 표현식과 선언(object expressions and object declarations) (0) | 2024.08.17 |
---|---|
[kotlin] 인라인 값 클래스(Inline Value Classes) (0) | 2024.08.15 |
[Kotlin] 중첩 클래스와 내부 클래스 (0) | 2024.08.15 |
[kotlin] 제네릭: in, out, where (0) | 2024.08.14 |
[kotlin] Sealed classes & interfaces (0) | 2024.08.14 |
댓글