티스토리 뷰

Java

[Java] Enum 기본

HUN 2021. 8. 20. 09:34

Enum 클래스


Enum은 열거형으로 불리며 서로 연관된 집합을 의미한다. 자바의 Enum은 아래와 같은 장점을 가진다.

  1. 열거체를 비교할 때 실제 값 뿐 아니라 타입까지도 체크한다.
  2. 열거체의 상수값이 재정의 되더라도 다시 컴파일할 필요가 없다
  3. 인스턴스 생성과 상속을 방지하여 상수값의 타입 안정성이 보장된다
  4. enum 키워드로 구현의도가 열거임을 확실히 알 수 있다.

Enum의 사용


enum 키워드를 사용하여 열거체를 정의하고, Enum이름.상수이름 으로 사용할 수 있다.

enum Color {
    RED, BLUE, GREEN
}

public class Main {
    public static void main(String[] args) {
        System.out.println(Color.RED);
        System.out.println(Color.BLUE);
        System.out.println(Color.GREEN);
    }
}

enum에 정의된 열거체들은 첫 번째부터 0, 1, ... , N으로 상수 값이 정의 된다. 불규칙적으로 상수값을 정의하고 싶으면 ()를 추가하고 원하는 상수 값을 추가한다. 단, 상수값을 저장할 수 있는 인스턴스 변수와 생성자 getter를 추가해야한다.

enum Color {
    RED(99), BLUE(50), GREEN(1);

    private int value;
    Color(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println(Color.RED);
        System.out.println(Color.BLUE);
        System.out.println(Color.GREEN);
    }
}

Enum의 메소드


valueOf()

Returns the enum constant of the specified enum type with the specified name. The name must match exactly an identifier used to declare an enum constant in this type.

enum에 정의된 열거체와 정확이 동일한 문자열을 전달받으면 해당 열거체를 반환해주는 메소드이다

public class Main {
    public static void main(String[] args) {
        System.out.println(Color.RED);
        System.out.println(Color.BLUE);
        System.out.println(Color.GREEN);
    }
}

name()

Returns the name of this enum constant, exactly as declared in its enum declaration. Most programmers should use the toString() method in preference to this one, as the toString method may return a more user-friendly name.This method is designed primarily for use in specialized situations where correctness depends on getting the exact name, which will not vary from release to release.

enum에 정의되어 있는 열거체의 이름을 그대로 반환하는 메소드이다. 공식 문서에서 볼 수 있듯이 대부분의 경우 toString()을 사용하여 user-friendly한 이름을 반환하도록 하고, 특수한 경우에만 name()을 사용한다.

public class Main {
    public static void main(String[] args) {
        System.out.println("Color.valueOf(\"RED\").name() = " + Color.valueOf("RED").name());
        System.out.println("Color.valueOf(\"BLUE\").name() = " + Color.valueOf("BLUE").name());
        System.out.println("Color.valueOf(\"GREEN\").name() = " + Color.valueOf("GREEN").name());
    }
}

ordinal()

Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial constant is assigned an ordinal of zero). Most programmers will have no use for this method.

enum에 정의된 열거체의 정의 순서를 반환한다. 공식 문서에서는 사용하지 않는 것을 권장한다.

public class Main {
    public static void main(String[] args) {
        System.out.println("Color.RED.ordinal() = " + Color.RED.ordinal());
        System.out.println("Color.BLUE.ordinal() = " + Color.BLUE.ordinal());
        System.out.println("Color.GREEN.ordinal() = " + Color.GREEN.ordinal());
    }
}

values()

enum에 정의된 모든 열거체를 저장한 배열을 생성하여 반환하는 메소드이다. java.lang.Enum에 정의되어 있지는 않고 자바 컴파일러가 자동으로 추가해주는 메소드이다.

public class Main {
    public static void main(String[] args) {
        for (Color color : Color.values()) {
            System.out.println(color);
        }
    }
}


참고

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함