본문 바로가기
Language/Kotlin

[Kotlin] enum 클래스(Enum Classes)란?

by Jay Son 아기 냥이 해린 짱💖 2021. 7. 17.

enum 클래스는 상태 모드 등 유사한 값들을 고유값으로 만들어 사용하기 위해 사용합니다.

 

enum class State {
    IDLE, RUNNING, FINISHED                           // 1
}

fun main() {
    val state = State.RUNNING                         // 2
    val message = when (state) {                      // 3
        State.IDLE -> "It's idle"
        State.RUNNING -> "It's running"
        State.FINISHED -> "It's finished"
    }
    println(message)
}
결과 : It's running

설명

1. enum 클래스에 값을 선언한다. 선언된 값은 모두 고유값이다.

2. enum 클래스를 특정 값은 선언한다.

3. when 조건문을 통해 state 선언 값에 따라 지정된 문구를 message 변수에 저장한다.

 

JAVA enum 클래스와 다르게 아래와 같이 enum 값에 속성 값을 포함 할 수 있다.

enum class Color(val rgb: Int) {                      // 1
    RED(0xFF0000),                                    // 2
    GREEN(0x00FF00),
    BLUE(0x0000FF),
    YELLOW(0xFFFF00);

    fun containsRed() = (this.rgb and 0xFF0000 != 0)  // 3
}

fun main() {
    val red = Color.RED
    println(red)                                      // 4
    println(red.containsRed())                        // 5
    println(Color.BLUE.containsRed())                 // 6
    println(Color.YELLOW.containsRed())               // 7
}
RED
true
false
true

설명

1. 속성과 메소드를 이용하여 enum값 선언한다.

2. 각 인스턴스는 생성자 매개변수에 인수값을 전달해야 한다.

3. enum 클래스 메소드는 ";"을 이용하여 선언한다.

4. 기본 toString() 동작되어 enum클래스에 선언된 이름을 출력 한다.

5. enum 클래스에서 생성한 메소드를 호출 한다.

6. enum 클래스 이름을 통해 메소드를 호출 한다.

7. enum 클래스 이름을 통해 메소드를 호출은 동일하지만 containsRed() 메소드 조건이 0xFF0000, 0xFFFF00 값을 AND 연상하여 결과 값이 0이 아니기 때문에 true 값을 출력 한다.

 

JAVA enum 값 선언하기

public class StatusEnum {
    enum STATUS {
        IDLE, RUNNING, FINISHED
    }

    public static void main(String[] args) {

        STATUS status = STATUS.RUNNING;
        String message = "";
        switch (status) {
            case IDLE:
                message = "It's idle";
                break;
            case RUNNING:
                message = "It's running";
                break;
            case FINISHED:
                message = "It's finished";
                break;
        }

        System.out.println(message);
        System.out.println(status);
    }
}
결과
It's running
RUNNING

위와 같이 enum값으로 선언해서 사용 할 경우 로그 출력 할 경우에도 enum값에 선안된 이름으로 출력 되어 디버깅에 유용합니다.

 

상태, 모델 등 고유값을 사용 할 경우 변수를 각 각 선언 후 사용 할 경우 값이 중복 될 수 있어 유지보수가 어려워지고 읽기 어려운 코드가 됩니다. 

반응형