오늘도 enum을 제대로 알고자 오라클 공식문서를 열심히 한번 읽어봅니다. 

 

# enum 개념 

- 왜 쓰는지?

enum은 열거 및 목록을 의미하는데, 자바에서는 미리 목록을 정의하고자 사용한다.

이때, 목록은 런타임에서 변하지 않는 상수를 의미한다. 특이한 점은 별도로 타입을 지정할 필요가 없다는 점이 없다는 점이다. 

 

- 어떤 의미가 있어?

c언어에서 enum을 특정한 값 없이 지정한 경우 0부터 할당되는데, 이때 switch문을 통해 활용하는 경우 실제 값인 0,1,2 등을 가지고 동작하기 때문이다. 그러나 자바에서의 enum은 기존에 C언어에서의 enum의 사용에서 업그레이드 되었다. 우선 Type 체크를 수행한다.

public enum Food {
    KOREAN(10),
    AMERICAN(20),
    CHINESE(30),
    MEXICO(40);

    private final int value;

    Food(int value){
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

public static void main(String[] args) {

        Food food = Food.AMERICAN;

        // Type check... We cannot use Drink enum or int in here :D
        switch (food){
            case KOREAN:
                System.out.println("Welcome to Korea!");
                break;
            case MEXICO:
                System.out.println("Welcome to Mexico");
                break;
            case CHINESE:
                System.out.println("Welcome to China");
                break;
            case AMERICAN:
                System.out.println("Welcome to US");
                break;
        }
    }

switch 문의 case 에서 다른 타입의 동일한 값을 지닌 enum은 사용할 수 없다. 

 

 

# enum에서 알고 있어야하는 내용 

- 생성자 

enum 클래스는 Enum을 상속받지 않아도 컴파일러가 컴파일 시 Enum 클래스를 상속받는다.

가령 위에서는 Enum(KOREAN, 0) 이 된다 재미있는 점은 초기에 클래스로더가 자바 프로그램을 구동할 때 여러가지 enum 클래스들을 초기화하는 모습도 같이 볼 수 있었다. 

 

- 메소드

따로 중요하게 봐야할 메소드는 values라 생각되는데, 그 이유는 iterate 할 때 유용하기 때문이다. 

그러나 중요한 포인트로는 ordinal 메소드가 ordinal 순서값을 반환하는 역할을 하는데 실제 해당 메소드에 의존하여 코드를 작성하면 안된다는 것이다. 왜냐하면 ordinal 값은 enum 클래스의 멤버가 추가될 때 마다 그 값의 ordinal이 변동될 수 있기 때문이다.

 

'가치코딩 [Java] > 기초문법' 카테고리의 다른 글

[Java 문법] I/O  (0) 2021.03.04
[Java 문법] 어노테이션  (0) 2021.02.06
[Java 문법] 패키지  (1) 2021.02.03
[Java 문법] 예외처리  (0) 2021.01.21
[Java 문법] 클래스  (0) 2020.12.18

+ Recent posts