[코틀린인액션] enum

enum class Color {
    RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}
  • enum 은 코틀린에서 소프트 키워드 로 취급
  • class 앞에 사용될 떄만 특별한 의미를 갖는다.

프로퍼티와 메서드가 있는 enum 클래스

fun main() {
    println(Color.BLUE.rgb());
}

enum class Color(val r: Int, val g: Int, val b: Int) {
    RED(255, 0, 0), ORANGE(255, 165, 0),
    YELLOW(255, 255, 0), GREEN(0, 255, 0),
    BLUE(0, 0, 255), INDIGO(75, 0, 130),
    VIOLET(238, 130, 238);

    fun rgb() = (r * 256 + g) * 256 + b
}

//255 출력됨

when 을 사용한 ENUM 의 처리

fun getMnemonic(color: Color) =
    when (color) {
        Color.RED -> "Richard"
        Color.ORANGE -> "Of"
        Color.YELLOW -> "York"
        Color.GREEN -> "Gave"
        Color.BLUE -> "Battle"
        Color.INDIGO -> "In"
        Color.VIOLET -> "Vain"
    }

fun main() {
    println("getMnemonic(   Color.BLUE) = " + getMnemonic(Color.BLUE));
}

Color 열거형의 값에 대해 해당하는 문자열을 반환

whencolor 변수의 값에 따라 적절한 분기를 선택함

여러 가지 값의 매칭

fun getWarmth(color: Color) =
    when (color) {
        Color.RED, Color.ORANGE, Color.YELLOW -> "warm"
        Color.GREEN -> "neutral"
        Color.BLUE, Color.INDIGO, Color.VIOLET -> "cold"
    }

ENUM 상수 임포트

import Color.*

fun getWarmth(color: Color) =
    when (color) {
        RED, ORANGE, YELLOW -> "warm"
        GREEN -> "neutral"
        BLUE, INDIGO, VIOLET -> "cold"
    }
  • 뭐 이런식으로 임포트도 된다고 하는데, 이건 자바에서도 동일하다..

아직은 자바17 에서의 Switch 문과 뭐가 다른건진 잘 모르겠다.


Uploaded by N2T