Enum Types 자바 열거는 상수의 집합을 정의하는 데 사용되는 특수 자바 유형입니다. 보다 정확하게는 Java enum 유형은 특별한 종류의 Java 클래스입니다. 열거 형은 상수, 메소드 등을 포함 할 수 있습니다. 자바 열거 형은 Java 5에 추가되었습니다.
Enum 예제
다음은 간단한 Java enum 예제입니다.
1 2 3 4 5 6 7 8 9 10 package com.github.sejoung.codetest.enumtest;public enum Level { HIGH, MEDIUM, LOW }
enum대신 사용되는 키워드 class또는 interface. Java enum키워드는이 유형 정의가 열거 형임을 Java 컴파일러에 알려줍니다.
위의 열거 형에서 상수를 다음과 같이 참조 할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 package com.github.sejoung.codetest.enumtest;public class Test { public static void main (String[] args) { Level level = Level.HIGH; System.out.println(level); } }
실행결과
if 문에 Enum if-statement에 Java enum을 사용하는 예
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.github.sejoung.codetest.enumtest;public class Test { public static void main (String[] args) { Level level = Level.HIGH; if (level == Level.HIGH) { System.out.println("높다" ); } else if (level == Level.MEDIUM) { System.out.println("중간" ); } else if (level == Level.LOW) { System.out.println("낮다" ); } } }
실행결과
1 2 3 4 높다 Process finished with exit code 0
switch 문에 Enum 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package com.github.sejoung.codetest.enumtest;public class Test { public static void main (String[] args) { Level level = Level.HIGH; switch (level) { case HIGH : System.out.println("switch 높다" ); break ; case MEDIUM : System.out.println("switch 중간" ); break ; case LOW : System.out.println("switch 낮다" ); break ; } } }
실행결과
1 2 3 switch 높다 Process finished with exit code 0
Enum 반복 1 2 3 4 5 6 7 8 9 10 11 12 package com.github.sejoung.codetest.enumtest;public class Test { public static void main (String[] args) { for (Level forlevel : Level.values()) { System.out.println(forlevel); } } }
실행결과
1 2 3 4 5 HIGH MEDIUM LOW Process finished with exit code 0
Enum toString() 1 2 3 4 5 6 7 8 9 10 11 12 13 package com.github.sejoung.codetest.enumtest;public class Test { public static void main (String[] args) { String levelText = Level.HIGH.toString(); System.out.println(levelText); } }
실행결과
1 2 3 4 5 HIGH Process finished with exit code 0
Enum 출력 1 2 3 4 5 6 7 8 9 10 package com.github.sejoung.codetest.enumtest;public class Test { public static void main (String[] args) { System.out.println(Level.HIGH); } }
실행결과
1 2 3 HIGH Process finished with exit code 0
Enum valueOf() 1 2 3 4 5 6 7 8 9 10 11 12 package com.github.sejoung.codetest.enumtest;public class Test { public static void main (String[] args) { Level levelValueOf = Level.valueOf("HIGH" ); System.out.println(levelValueOf); } }
Enum Fields 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package com.github.sejoung.codetest.enumtest;public enum Level { HIGH (3 ), MEDIUM(2 ), LOW (1 ) ; private final int levelCode; private Level (int levelCode) { this .levelCode = levelCode; } }
Enum Methods 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package com.github.sejoung.codetest.enumtest;public enum Level { HIGH (3 ), MEDIUM(2 ), LOW (1 ) ; private final int levelCode; private Level (int levelCode) { this .levelCode = levelCode; } public int getLevelCode () { return this .levelCode; } }
1 2 3 4 5 6 7 8 9 10 package com.github.sejoung.codetest.enumtest;public class Test { public static void main (String[] args) { Level level = Level.HIGH; System.out.println(level.getLevelCode()); } }
실행결과
1 2 3 3 Process finished with exit code 0
Enum Abstract Methods 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 package com.github.sejoung.codetest.enumtest.abstracttest;public enum Level { HIGH{ @Override public String asLowerCase () { return HIGH.toString().toLowerCase(); } }, MEDIUM{ @Override public String asLowerCase () { return MEDIUM.toString().toLowerCase(); } }, LOW{ @Override public String asLowerCase () { return LOW.toString().toLowerCase(); } }; public abstract String asLowerCase () ; }
1 2 3 4 5 6 7 8 9 10 11 package com.github.sejoung.codetest.enumtest.abstracttest;public class Test { public static void main (String[] args) { String lowLevelText = Level.HIGH.asLowerCase(); System.out.println(lowLevelText); } }
실행결과
1 2 3 high Process finished with exit code 0
Enum Implementing Interface 1 2 3 4 5 6 7 8 package com.github.sejoung.codetest.enumtest.interfacetest;public interface MyInterface { public String getDescription () ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.github.sejoung.codetest.enumtest.interfacetest;public enum EnumImplementingInterface implements MyInterface { FIRST("First Value" ), SECOND("Second Value" ); private String description = null ; private EnumImplementingInterface (String desc) { this .description = desc; } @Override public String getDescription () { return this .description; } }
1 2 3 4 5 6 7 8 9 package com.github.sejoung.codetest.enumtest.interfacetest;public class Test { public static void main (String[] args) { MyInterface mi = EnumImplementingInterface.FIRST; System.out.println(mi.getDescription()); } }
실행결과
1 2 3 First Value Process finished with exit code 0
EnumSet 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.github.sejoung.codetest.enumtest;import java.util.EnumSet;public class Test { public static void main (String[] args) { EnumSet<Level> enumSet = EnumSet.of(Level.HIGH, Level.MEDIUM); for (Level enumLevael : enumSet){ System.out.println(enumLevael); } } }
실행결과
1 2 3 4 HIGH MEDIUM Process finished with exit code 0
EnumMap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package com.github.sejoung.codetest.enumtest;import java.util.EnumMap;import java.util.EnumSet;import java.util.Map;public class Test { public static void main (String[] args) { Map<Level, String> enumMap = new EnumMap <>(Level.class); enumMap.put(Level.HIGH , "High level" ); enumMap.put(Level.MEDIUM, "Medium level" ); enumMap.put(Level.LOW , "Low level" ); String levelValue = enumMap.get(Level.HIGH); System.out.println(levelValue); } }
실행결과
1 2 3 High level Process finished with exit code 0
Enum 세부정보 Java 열거 형은 java.lang.Enum클래스를 암시 적으로 extend 하므로 열거 형에서 다른 클래스를 extend 할 수 없습니다.
Java enum에 필드와 메소드가 포함되어 있으면 필드와 메소드의 정의가 항상 enum의 상수 목록 뒤에 와야합니다 . 또한 열거 형 상수 목록은 세미콜론으로 끝나야합니다.
참조