이 포스트는 아래의 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 값 중 하나로 정의했지만 이는 몇 가지 문제를 가지고 있다.
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)