[Kotlin] Enum Class

문승연·2023년 7월 31일
0

Kotlin 기본

목록 보기
2/11

이 포스트는 아래의 Android 공식 홈페이지에서 제공하는 Codelab을 기반으로 작성되었습니다.
https://developer.android.com/codelabs/basic-android-kotlin-compose-generics?hl=ko#0

이 포스트는 이전 글의 예제에 이어서 진행한다.
https://velog.io/@moonliam_/Kotlin-Generics-Data-Type-%EC%9D%BC%EB%B0%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9C%A0%ED%98%95

이전 포스트에서 [Question]의 [difficulty] 값을 "easy", "medium", "hard" 세가지 String 값 중 하나로 정의했지만 이는 몇 가지 문제를 가지고 있다.

  1. 가능한 세 가지 문자열 중 하나를 실수로 입력할 경우 버그가 발생할 수 있다.
  2. 값이 변경되는 경우 (ex. "medium"이 "average"로 변경) 모든 문자열의 사용을 업데이트해야 한다.
  3. 내가 아닌 다른 개발자가 세 가지 유효한 값 중 하나가 아닌 다른 문자열을 실수로 사용하는 것을 방지할 수 없다.
  4. 난이도 수준이 더 추가되면 코드 관리가 어려워진다.

Kotlin에서는 Enum 클래스라는 특수한 유형의 클래스를 통해 이러한 문제를 해결할 수 있다.

Enum 클래스는 가능한 값 집합이 제한되어 있는 유형을 만드는 데 사용된다. 예시로 네 가지 기본 방향(동, 서, 남, 북)을 Enum 클래스로 나타낼 수 있다. (추가 방향이 필요치 않고 코드에서도 허용하지 않음.)

가능한 각 enum 값을 enum 상수라고 부른다. enum 상수는 중괄호 안에 배치되며 쉼표로 구분된다. 상수 이름은 모두 대문자로 표기하는 것이 규칙.

점 연사자를 사용해서 enum 상수를 참조할 수 있다.

Enum 클래스를 활용해서 기존 [Question] 클래스를 리팩토링할 수 있다.

먼저 [Difficulty]라는 이름의 새로운 Enum 클래스를 생성한다.

enum class Difficulty {
    EASY, MEDIUM, HARD
}

그 다음 [Difficulty] Enum 클래스를 활용해서 [Question] 클래스의 [difficulty] 속성의 데이터 타입을 "String"에서 "Difficulty"로 변경한다.

class Question<T>(
    val questionText: String,
    val answer: T,
    val difficulty: Difficulty
)
val question1 = Question<String>("Quoth the raven ___", "nevermore", Difficulty.MEDIUM)
val question2 = Question<Boolean>("The sky is green. True or false", false, Difficulty.EASY)
val question3 = Question<Int>("How many days are there between full moons?", 28, Difficulty.HARD)
profile
"비몽(Bemong)"이라는 앱을 개발 및 운영 중인 안드로이드 개발자입니다.

0개의 댓글