Java Enum

cotchan·2021년 7월 23일
0
  • 이 포스팅은 개인 공부 목적으로 작성한 포스팅입니다
  • 아래 출처 글을 바탕으로 작성하였습니다.

1. Enum 기본

  • 열거형은 서로 연관된 상수들의 집합입니다.
enum Day {
	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

enum Month {
	JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUEST, SEPTEMBER,
	OCTOBER, NOVEMBER, DECEMBER;
}

enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
  • 이렇게 정의된 열거체를 사용하는 방법은 아래와 같습니다.
  • 문법: 열거체이름.상수이름
//예시
Rainbow.RED

2. Enum 상수값 정의방법

  • 별도의 추가정의가 없는 열거체의 첫 번째 상수값은 0부터 설정되며, 그 다음은 바로 앞의 상숫값보다 1만큼 증가되며 설정됩니다.

  • 그러므로 불규칙한 값(임의의 값)으로 상숫값을 설정하고 싶으면 상수의 이름 옆에 괄호를 추가하고, 그 안에 원하는 상수값을 명시할 수 있습니다.

  • 하지만 이때는 반드시 불규칙한 특정 값을 저장할 수 있는 인스턴스 변수와 생성자를 아래 예제와 같이 별도로 추가해야 합니다.

enum Rainbow {

    RED(3), ORANGE(10), YELLOW(21), GREEN(5), BLUE(1), INDIGO(-1), VIOLET(-11);

 
    //불규칙한 특정 값을 저장할 수 있는 인스턴스 변수
    private final int value;

    //별도의 생성자
    Rainbow(int value) { this.value = value; }

    //getter
    public int getValue() { return value; }

}

3. Enum 대표 메소드


public class Main {

    enum Rainbow {
        RED(3),ORANGE(10), YELLOW(21),GREEN(5),BLUE(1),INDIGO(-1),VIOLET(-11);

        private final int value;
        Rainbow(int value) {
            this.value = value;
        }
    }

    public static void main(String[] args) {
        Rainbow rainbow = Rainbow.BLUE;
        System.out.println(rainbow.name()); //result: BLUE
        Rainbow indigo = Rainbow.valueOf("INDIGO");
        System.out.println(indigo.name());  //result: INDIGO
    }
}

4. Enum String 테스트

  • Enum Value를 String으로 정의할 때 Enum 타입과 String 타입을 구분하는 테스트 코드입니다.
public class Main {

    public enum Level {

        GOLD("Gold"), SILVER("Silver");

        private String value;

        Level(String value) {
            this.value = value;
        }

        public String getValue() { return value; }
    }


    public static void main(String[] args) throws Exception {

        System.out.println(Level.GOLD);  //GOLD
        System.out.println(Level.SILVER);    //SILVER
        System.out.println(Level.GOLD.getValue());   //Gold
        System.out.println(Level.SILVER.getValue()); //Silver

        if (Level.GOLD instanceof Level) {
            System.out.println("FSSLevel.GOLD instanceof FSSLevel");    //here
        }

        if (Level.GOLD.getValue() instanceof String) {
            System.out.println("FSSLevel.GOLD.getValue() instanceof String");   //here
        }

        if (Level.GOLD.equals("GOLD")) {
            System.out.println("FSSLevel.GOLD.equals(\"GOLD\") is true");
        } else {
            System.out.println("FSSLevel.GOLD.equals(\"GOLD\") is false");  //here
        }

        if (Level.GOLD.getValue().equals("Gold")) {
            System.out.println("FSSLevel.GOLD.getValue().equals(\"Gold\") is true");    //here
        } else {
            System.out.println("FSSLevel.GOLD.getValue().equals(\"Gold\") is true");
        }
    }
}

//System.out.println result

GOLD
SILVER
Gold
Silver
FSSLevel.GOLD instanceof FSSLevel
FSSLevel.GOLD.getValue() instanceof String
FSSLevel.GOLD.equals("GOLD") is false
FSSLevel.GOLD.getValue().equals("Gold") is true

profile
https://github.com/cotchan

0개의 댓글