Kotlin - Enum class 와 when문

kez·2023년 8월 16일
0

Kotlin

목록 보기
6/6

Enum class란?

Kotlin의 Enum 클래스는 타입 안정성을 갖는 상수의 집합을 표현합니다. Enum 클래스를 사용하여 열거형 타입을 정의할 수 있습니다. 또한 Enum은 명확한 상수 값을 갖는 타입을 나타내는 데 유용합니다.

Enum Class 예제

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 문

when 문은 Kotlin에서 switch 문의 확장된 형태라고 볼 수 있으며, 다양한 조건을 표현할 때 매우 간결하고 가독성이 좋습니다. Enum 클래스와 when 문을 함께 사용하면 코드가 매우 간결해지며 안정성을 가지게됩니다.

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 Class 와 When문 사용

안정성 향상

위 주말 예제에서 만약 하나의 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문을 활용하여 더욱 수준 높은 코드를 작성할 수 있으며 이는 곧 안정적이고 생산성을 가진 코드를 작성할 수 있는 기반이 됩니다.

profile
Android Developer

0개의 댓글