본문 바로가기
Java

Enum

by BAYABA 2021. 10. 19.
  1. 이 포스팅은 개인 공부 목적으로 작성한 포스팅입니다.
  2. 아래 출처 글을 바탕으로 작성하였습니다.

목차

  1. Enum 기본
  2. Enum 상수값 정의방법
  3. Enum 대표 메소드
  4. Enum String 테스트
  5. name() 메소드
  6. valueOf() 메소드

1. Enum 기본

  1. 열거형은 서로 연관된 상수들의 집합입니다.
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 }

  1. 이렇게 정의된 열거체를 사용하는 방법은 아래와 같습니다.
  • 문법: 열거체이름.상수이름
//예시
Rainbow.RED

2. Enum 상수값 정의방법

  1. 별도의 추가정의가 없는 열거체의 첫 번째 상수값은 0부터 설정되며, 그 다음은 바로 앞의 상숫값보다 1만큼 증가되며 설정됩니다.
  2. 그러므로 불규칙한 값(임의의 값)으로 상숫값을 설정하고 싶으면 상수의 이름 옆에 괄호를 추가하고, 그 안에 원하는 상수값을 명시할 수 있습니다.
  3. 하지만 이때는 반드시 불규칙한 특정 값을 저장할 수 있는 인스턴스 변수와 생성자를 아래 예제와 같이 별도로 추가해야 합니다.
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 대표 메소드

스크린샷 2021-07-01 오후 2 30 39


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 테스트

  1. 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");
        }
    }
}

5. name() 메소드

  1. name() 메소드를 사용하면 열거형 상수(Enum)의 이름을 String 문자열로 반환할 수 있습니다.
@Getter
public enum NoticeType {
    MAJOR("핵심 고객"), ALL("고객");

    private final String type;

    NoticeType(String type) {
        this.type = type;
    }

    public static NoticeType of(String noticeType) {
        try {
            return NoticeType.valueOf(noticeType);
        } catch (IllegalArgumentException e) {
            // throw new Exception...
        }
    }
}

NoticeType.ALL.name();  // String "ALL"을 반환
NoticeType.MAJOR.name();  // String "MAJOR"를 반환

6. valueOf() 메소드

  1. static 메소드인 valueOf()는 String 인자를 기준으로 enum 인스턴스를 가져옵니다.
public class Main {

    enum Rainbow {
        RED("레드"),
        ORANGE("오렌지"),
        YELLOW("옐로우"),
        GREEN("그린"),
        BLUE("블루"),
        INDIGO("남색"),
        VIOLET("보라");

        private final String value;

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

        public String getValue() {
            return value;
        }
    }

    public static void main(String[] args) {

        try {
//            Rainbow value = Rainbow.valueOf("Red");   //print Exception
//            Rainbow value = Rainbow.valueOf("red");   //print Exception
//            Rainbow value = Rainbow.valueOf("RED");   //print RED

            System.out.println(value.name());
        } catch (IllegalArgumentException e) {
            System.out.println("Exception");
        }
    }
}

//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

출처

  1. Enum 클래스
  2. Java:enum의 뿌리를 찾아서...
  3. Java에서 열거 형을 문자열로

'Java' 카테고리의 다른 글

yyyy vs YYYY  (0) 2021.10.26
LocalDate to LocalDateTime  (0) 2021.10.25
인터페이스의 default, static 키워드(Java8)  (0) 2021.10.05