enum과 when

OH JU HYEON·2022년 7월 12일

Kotlin

목록 보기
4/6
post-thumbnail

enum과 when

enum

시작

코틀린의 when은 자바의 switch를 대체할 수 있으면서 더 강력하고 자주 사용되는 코틀린의 요소이다. when에 대해 설명하는 과정에서 enum을 선언하는 방법 또한 체크한다.

Class 정의

package kotlinBasic

enum class Color {
    RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
}

위 예시 코드는 간단한 enum클래스를 정의한 것이다.

enum은 자바 선언 보다 코틀린 선언에 더 많은 키워드를 써야 하는 흔치 않은 예라고 한다. 자바와 코틀린의 enum의 차이점을 간단히 체크하면 코틀린에서는 enum class를 사용하고 자바에서는 enum을 사용하는 부분이다.

코틀린에서는 enum을 Soft Keyword라고 부른다. 자바와 마찬가지로 단순 값만 열거하는 게 아닌 enum 클래스 안에 PropertyMethod를 정의할 수 있다.

enum class에서 메서드 정의

예를 들어 책에서 제공하는 예시를 통해 Property가 있는 enum 클래스를 만들어보면 아래와 같다.

package kotlinBasic

enum class Color(val r: Int, val g: Int, val b: Int) {

    RED(255, 0, 0), ORANGE(255, 165, 0),
    YELLOW(225, 225, 0), GREEN(0, 255, 0),
    BLUE(0, 0, 255), INDIGO(75, 0, 130),
    VIOLET(238, 130, 238);

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

enum에서도 생성자와 프로퍼티를 선언한다. enum class안에 메서드를 정의해야 하는 경우 반드시 enum 상수 목록과 메서드 정의 사이에 세미콜론;을 넣어야 한다.

when

when으로 enum class 다루기

자바의 switch문에 해당하는 코틀린의 구성 요소가 when식이다. 이 아닌 이기 때문에 식이 본문인 함수에 when을 바로 사용 가능하다는 점을 체크해야 한다.

when 사용하기

fun getMnemonic(color: Color) = when (color) {
    Color.RED -> "빨강"
    Color.BLUE -> "파랑"
    Color.GREEN -> "초록"
    Color.INDIGO -> 3
    Color.ORANGE -> 2
    Color.VIOLET -> "Violet"
    Color.YELLOW -> 1
}

when을 통해 Color로 전달된 값과 같은 분기를 찾는다. 특징을 체크해 보면 각 분기의 끝에서 자바와 같이 break를 넣지 않아도 된다는 점이다.

또, 분기 안에서 여러 값을 매치 패턴으로 사용이 가능하다. 이런 경우 값 사이에 ,를 넣어 분리해준다. 간단히 예시 코드만 보면 Color.YELLOW, Color.RED -> 1 이렇다.

import를 통해 이름으로 사용하기

fun getMnemonic(color: Color) = when (color) {
    BLUE -> "파랑"
    GREEN -> "초록"
    INDIGO -> 3
    ORANGE -> 2
    VIOLET -> "Violet"
    YELLOW, Color.RED -> 1
}

코드를 보면 위와 달리 앞에 Color.이 빠지게 된다. 이렇게 사용할 수 있는 이유는 enum 상수를 모두 임포트했기 떄문이다. 함수를 사용하는 클래스 위에서 import kotlinBasic.Color.*와 같이 스타 임포트를 넣어 enum 상수를 모두 임포트해 짧은 이름으로 사용할 수 있다.

코드만 보더라도 짧아진 것을 확인할 수 있다.

profile
읽기만 해도 이해가 되는 글을 쓰기 위해 노력합니다.

0개의 댓글