신규 블로그를 만들었습니다!

2020년 이후부터는 아래 블로그에서 활동합니다.

댓글로 질문 주셔도 확인하기 어려울 수 있습니다.

>> https://bluemiv.tistory.com/

enum class를 살펴보기전에 enum에 대한 개념을 간단하게 아는 것이 좋습니다.

만약 잘 알고 있는 분은 "여기"를 누르고 바로 코틀린의 enum class를 살펴보세요.

 

JAVA의 enum 클래스

Java에서는 상수를 선언할때 final static String과 같이 상수를 선언합니다. 하지만, 이렇게 선언하는 방법에 다양한 문제가 있어 자바 1.5부터 Enum이라는 개념을 도입했습니다. 

 

enum을 사용하면 무엇이 좋을까요. 일단 코드가 짧아져 간단해지고, 가독성이 높아집니다. 코드를 보더라도 알 수 있는데,

 

public class JavaEnumExam {

    // 일반적인 상수 선언 방법
    public static final String MONDAY = "MONDAY";
    public static final String TUESDAY = "TUESDAY";
    public static final String WEDNESDAY = "WEDNESDAY";
    public static final String THURSDAY = "THURSDAY";
    public static final String FRIDAY = "FRIDAY";
    public static final String SATURDAY = "SATURDAY";
    public static final String SUNDAY = "SUNDAY";

    public static void main (String[] args) {
        String day;

        day = JavaEnumExam.MONDAY;
        System.out.println("처음 값 : " + day);

        day = "none"; // 실수로 요일과 상관없는 값을 넣어도 컴파일 에러가 생기지 않는다.
        System.out.println("바뀐 후" + day);

 // Enum 클래스를 사용한 경우...
        Day day_enum;
        day_enum = Day.MONDAY;
        System.out.println("Enum 클래스를 사용한 경우 : " + day_enum);
//        day_enum = "none"; // 컴파일 에러 발생 -> 실수 방지 가능

    }

}

// Day라는 enum class 생성
enum Day{
    MONDAY,TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
​

보통 상수를 선언할때, 4번째 ~ 10번째줄처럼 상수를 선언합니다. 하지만, enum을 사용하면 32번째 ~ 34번째 줄 과 같이 간단하게 선언이 가능합니다. 또 연관성이 있는 상수들을 한번에 볼 수 있어서 가독성이 높습니다.

 

그리고, enum을 사용하면 Enum 클래스에서 선언하지 않은 값을 25번째 줄과 같이 변수에 넣으려고 하면, 컴파일 에러가 발생합니다. 실수를 방지해줍니다. 

 

여기까지 간단하게 enum에 대해 살펴봤습니다. 이제 코틀린에서 enum class를 사용하는 방법을 살펴봅시다.

 

 

 

enum 클래스 정의

enum은 자바 선언보다 코틀린 선언에 더 많은 키워드를 써야 하는 흔치 않은 예입니다. 자바에서는 enum을 사용하지만, 코틀린에서는 enum class를 사용합니다. 여기서 enum은 혼자서 사용할 수 없는 소프트 키워드(soft keyword)입니다.

 

간단하게 예제를 살펴보면,

 

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

위 예제는 enum class를 이용해서 색상을 정의하는 예제입니다.

 

부가설명을 하자면... enum은 반드시 class 앞에 붙어야만 특별한 의미를 가집니다. (즉, class가 없으면 그냥 이름처럼 사용할 수 있다는 뜻)

 

참고. 만약 class라는 이름으로 변수를 정의하고 싶을때는 clazz나 aClass를 사용하여 하면 편하다.

 

 

프로퍼티와 메소드가 있는 enum 클래스 선언

enum에서도 클래스와 마찬가지로 프로퍼티, 생성자를 선언할 수 있습니다.

 

여기서 특이한 부분이 있는데, 코틀린에서는 세미콜론(;)을 사용하지 않습니다. 하지만, enum class에서는 프로퍼티와 메소드를 구분하기 위해 세미콜론(;)을 사용합니다. 예제를 살펴봅시다.

 

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); // 세미콜론을 붙여야 함

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

fun main(args: Array<String>){
    println("Blue rgb : ${Color.INDIGO.rgb()}")
}
​

 

프로퍼티 뒤에 세미콜론이 들어가는 것을 확인 할 수 있습니다.

 

본 글은 Dmitry Jemerov, Svetlana Isakova의 "Kotlin in action" 책을 참고하여 작성한 글입니다.

 

다른 글 살펴보기

2019/02/06 - [Language/Kotlin] - 코틀린의 문자열 템플릿(Kotlin String Templates)

 

코틀린의 문자열 템플릿(Kotlin String Templates)

코틀린에는 문자열 템플릿이란 것이 있습니다. 문자열 안에서 외부에 있는 변수를 가져올 수 있는 방법입니다. 예를들어서 Java에서 "Hello, Kotlin!"을 찍어본다고 합시다. (이때 "Kotlin"은 name이라는 변수에..

hongku.tistory.com

2019/02/07 - [Language/Kotlin] - 코틀린의 필드와 접근자(getter, setter) 사용방법

 

코틀린의 필드와 접근자(getter, setter) 사용방법

들어가기 앞서, 클래스에 대한 간단한 개념을 알아야하는데, 우리가 클래스를 사용할 때는... 내부의 데이터를 캡슐화(encapsulate)하고, 캡슐화한 데이터를 다루는 코드를 클래스라는 하나의 주체안에 가둬두기..

hongku.tistory.com

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기