Enum Types
Enum Types
자바 열거는 상수의 집합을 정의하는 데 사용되는 특수 자바 유형입니다. 보다 정확하게는 Java enum 유형은 특별한 종류의 Java 클래스입니다. 열거 형은 상수, 메소드 등을 포함 할 수 있습니다. 자바 열거 형은 Java 5에 추가되었습니다.
Enum 예제
다음은 간단한 Java enum 예제입니다.
package com.github.sejoung.codetest.enumtest;
public enum Level {
HIGH,
MEDIUM,
LOW
}
enum대신 사용되는 키워드 class또는 interface. Java enum키워드는이 유형 정의가 열거 형임을 Java 컴파일러에 알려줍니다.
위의 열거 형에서 상수를 다음과 같이 참조 할 수 있습니다.
package com.github.sejoung.codetest.enumtest;
public class Test {
public static void main(String[] args) {
Level level = Level.HIGH;
System.out.println(level);
}
}
실행결과
HIGH
if 문에 Enum
if-statement에 Java enum을 사용하는 예
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("낮다");
}
}
}
실행결과
높다
Process finished with exit code 0
switch 문에 Enum
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;
}
}
}
실행결과
switch 높다
Process finished with exit code 0
Enum 반복
package com.github.sejoung.codetest.enumtest;
public class Test {
public static void main(String[] args) {
for (Level forlevel : Level.values()) {
System.out.println(forlevel);
}
}
}
실행결과
HIGH
MEDIUM
LOW
Process finished with exit code 0
Enum toString()
package com.github.sejoung.codetest.enumtest;
public class Test {
public static void main(String[] args) {
String levelText = Level.HIGH.toString();
System.out.println(levelText);
}
}
실행결과
HIGH
Process finished with exit code 0
Enum 출력
package com.github.sejoung.codetest.enumtest;
public class Test {
public static void main(String[] args) {
System.out.println(Level.HIGH);
}
}
실행결과
HIGH
Process finished with exit code 0
Enum valueOf()
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
package com.github.sejoung.codetest.enumtest;
public enum Level {
HIGH (3), //calls constructor with value 3
MEDIUM(2), //calls constructor with value 2
LOW (1) //calls constructor with value 1
; // semicolon needed when fields / methods follow
private final int levelCode;
private Level(int levelCode) {
this.levelCode = levelCode;
}
}
Enum Methods
package com.github.sejoung.codetest.enumtest;
public enum Level {
HIGH (3), //calls constructor with value 3
MEDIUM(2), //calls constructor with value 2
LOW (1) //calls constructor with value 1
; // semicolon needed when fields / methods follow
private final int levelCode;
private Level(int levelCode) {
this.levelCode = levelCode;
}
public int getLevelCode() {
return this.levelCode;
}
}
package com.github.sejoung.codetest.enumtest;
public class Test {
public static void main(String[] args) {
Level level = Level.HIGH;
System.out.println(level.getLevelCode());
}
}
실행결과
3
Process finished with exit code 0
Enum Abstract Methods
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();
}
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);
}
}
실행결과
high
Process finished with exit code 0
Enum Implementing Interface
package com.github.sejoung.codetest.enumtest.interfacetest;
public interface MyInterface {
public String getDescription();
}
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;
}
}
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());
}
}
실행결과
First Value
Process finished with exit code 0
EnumSet
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);
}
}
}
실행결과
HIGH
MEDIUM
Process finished with exit code 0
EnumMap
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);
}
}
실행결과
High level
Process finished with exit code 0
Enum 세부정보
Java 열거 형은 java.lang.Enum클래스를 암시 적으로 extend 하므로 열거 형에서 다른 클래스를 extend 할 수 없습니다.
Java enum에 필드와 메소드가 포함되어 있으면 필드와 메소드의 정의가 항상 enum의 상수 목록 뒤에 와야합니다 . 또한 열거 형 상수 목록은 세미콜론으로 끝나야합니다.