Kotlin의 Enum 클래스는 타입 안정성을 갖는 상수의 집합을 표현합니다. Enum 클래스를 사용하여 열거형 타입을 정의할 수 있습니다. 또한 Enum은 명확한 상수 값을 갖는 타입을 나타내는 데 유용합니다.
Kotlin의 Enum 클래스는 타입 안정성을 갖는 상수의 집합을 표현합니다. 예를 들어, 요일을 나타내는 Enum 클래스는 다음과 같습니다.
enum class Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Enum 항목들은 일반 객체처럼 동작하므로, 프로퍼티나 메소드를 가질 수 있습니다.
enum class Day(val isWeekend: Boolean) {
MONDAY(false),
TUESDAY(false),
WEDNESDAY(false),
THURSDAY(false),
FRIDAY(false),
SATURDAY(true),
SUNDAY(true);
fun displayDayType() = if (isWeekend) "주말" else "평일"
}
when 문은 Kotlin에서 switch 문의 확장된 형태라고 볼 수 있으며, 다양한 조건을 표현할 때 매우 간결하고 가독성이 좋습니다. Enum 클래스와 when 문을 함께 사용하면 코드가 매우 간결해지며 안정성을 가지게됩니다.
when 문은 다양한 조건을 검사할 수 있으며, 여러 케이스를 콤마로 구분하여 한 줄에 표현할 수도 있습니다
fun describeDay(day: Day): String = when(day) {
Day.MONDAY -> "월요일은 힘들어"
Day.TUESDAY -> "화요일이야"
Day.WEDNESDAY -> "수요일이다"
Day.THURSDAY -> "목요일이네"
Day.FRIDAY -> "드디어 금요일!"
Day.SATURDAY, Day.SUNDAY -> "주말이야!"
// 모든 가능한 Enum 값들을 처리했기 때문에. else 절은 필요 없습니다.
}
위 주말 예제에서 만약 하나의 Enum 값이라도 빠져있다면 when문에서 에러가 발생하며 이는 곧 상태 관리의 안정성을 향상시킨다는 장점을 가지고 있습니다.
fun describeDay(day: Day): String = when(day) {
Day.MONDAY -> "월요일은 힘들어"
Day.TUESDAY -> "화요일이야"
Day.WEDNESDAY -> "수요일이다"
Day.FRIDAY -> "드디어 금요일!"
Day.SATURDAY, Day.SUNDAY -> "주말이야!"
// 목요일이 빠져있기 때문에 해당 구문은 오류를 발생시킴
}
Enum Class와 when문을 활용하여 상태관리, 상수관리를 하는 것은 코드의 질을 매우 높일 수 있는 방법이라고 생각합니다.
무엇보다도 Enum class를 통해 상태값(flags)를 가시적인 형태로 구성할 수 있으며, 이는 곧 코드의 가독성 및 확장성을 폭발적으로 향상시킬 수 있습니다.
// 기존 Boolean Flag 사용
fun printIsPerson(isPerson: Boolean) {
if (isPerson) {
println("사람입니다")
} else {
println("사람이 아닙니다")
}
}
//Enum class 와 When문 사용
enum class ObjectType {
PEOPLE, BIRD, FISH, FLOWER, NONE
}
// when 문을 통해 확장성 향상
// enum class의 명시적인 type 선언으로 코드 가독성 향상
fun printObjectType(objectType: ObjectType) {
when(objectType) {
PEOPLE -> println("사람입니다")
BIRD -> println("새입니다")
FISH -> println("물고기입니다")
FLOWER -> println("꽃입니다")
else -> println("잘모르겠습니다")
}
}
이렇듯 Enum Class와 When문을 활용하여 더욱 수준 높은 코드를 작성할 수 있으며 이는 곧 안정적이고 생산성을 가진 코드를 작성할 수 있는 기반이 됩니다.