Enum Types

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);

}
}

실행결과

1
2
HIGH

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

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), //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;
}
}


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의 상수 목록 뒤에 와야합니다 . 또한 열거 형 상수 목록은 세미콜론으로 끝나야합니다.

참조