728x90
[ enum 클래스 정의 ]
// 가장 기본적인 enum class
enum class Color {
RED, BLUE, YELLOW, GREEN, BLACK
}
∘ enum 클래스 안에 프로퍼티나 메서드를 정의할 수 있다.
enum class Color(
val r: Int, val g: Int, val b: Int
) {
RED(255, 0, 0),
YELLOW(255, 255, 0),
GREEN(0, 255, 0),
BLUE(0, 0, 255)
;
// enum class 내부 메서드
fun getRgb(): Int {
return (r * 256 + g) * 256 + b
}
// fun getRgb() = (r * 256 + g) * 256 + b
}
∘ enum의 각 상수를 정의할 때 그 상수에 해당하는 프로퍼티 값을 지정해야 한다. RED x , RED(255,0,0) o
∘ enum class 내부에 메서드를 정의할 때 ; 을 필수적으로 붙여야 한다.
[ when으로 enum 클래스 다루기 ]
∘ 코틀린의 when은 자바의 switch를 대체할 수 있다.
fun getColor(color: Color) =
when(color) {
Color.RED -> "빨강"
Color.Blue -> "파랑"
Color.Green -> "초록"
Color.Yellow -> "노랑"
}
fun getColor(color: Color) =
when(color) {
Color.RED, Color.ORANGE -> "warm"
Color.GREEN -> "neutral"
Color.BLUE, Color.INDIGO -> "cold"
else -> "잘 모르겠음"
}
∘ when에 setOf를 사용할 수 있다.
fun mix(c1: Color, c2: Color) =
when(setOf(c1, c2)) {
setOf(RED, YELLOW) -> ORANGE
setOf(YELLOW, BLUE) -> GREEN
setOf(BLUE, VIOLET) -> INDIGO
else -> throw Exception("Dirty Color")
}
[ 스마트 캐스트 : 타입 검사와 타입 캐스트 조합 ]
fun smartCast(e : Any){
when (e){
is Int -> println(e*2) //변수 e가 Int이면 Int로 스마트 캐스트 후 e*2 처리
is String -> println(e.length) //변수 e가 String이면 String으로 스마트 캐스트 후 e.length 처리
is IntArray -> println(e.sum()) //변수 e가 IntArray이면 IntArray로 스마트 캐스트 후 e.sum() 처리
else -> return
}
[ 리팩토링 if => when ]
// if
fun eval(e: Expr): Int =
if(e is Num){
e.value
}
else if(e is Sum) {
eval(e.left) + eval(e.right)
}
else {
throw IllegalArgumentException("Unknown expression")
}
fun eval(e: Expr): Int =
when(e) {
is Num -> e.value
is Sum -> eval(e.left) + eval(e.right)
else -> throw IllegalArgumentException("UnKnown expression");
}
728x90
'Kotlin > Kotlin In Action' 카테고리의 다른 글
[Kotlin] 2-5. 코틀린의 예외 처리 (0) | 2022.05.15 |
---|---|
[Kotlin] 2-4. 이터레이션: while & for (0) | 2022.05.15 |
[Kotlin] 2-2. 클래스와 프로퍼티 (0) | 2022.04.03 |
[Kotlin] 2-1. 함수와 변수 (0) | 2022.03.31 |
[Kotlin] 1. 코틀린이란? (0) | 2022.01.19 |