Enum 클래스는 고유 타입으로 상수를 이용할 수 있게 하는 특수한 클래스입니다. (자세한 내용) 다음은 가장 기초적 형태의 Enum 선언입니다.
public enum FourDevas {
백호, 주작, 청룡, 현무;
}
이렇게 하면 백호, 주작, 청룡, 현무의 4개의 상수가 지정되며 FourDevas 자료형을 통해 해당 상수들을 사용할 수 있습니다.
아래 코드에서 변수fd에는 FourDevas 클래스에서 지정한 상수들만 사용 가능하며 String을 지정하려고 하면 예외가 발생합니다.
public class EnumTest {
public static void main(String[] args) {
System.out.println(FourDevas.백호);
// 백호
FourDevas fd = FourDevas.주작;
System.out.println(fd);
// 주작
// fd = "참새"; // 예외 발생
}
}
이를 통해 특정 변수에 할당되는 상수의 범위를 정할 수 있습니다.
Enum 클래스는 values()라는 메소드를 기본적으로 제공하며 상수 목록을 배열 형태로 반환합니다.
public class EnumTest2 {
public static void main(String[] args) {
for(FourDevas f : FourDevas.values()) {
System.out.println(f);
}
/*
* 백호
* 주작
* 청룡
* 현무
*/
}
}
스트링 값을 통해 상수에 접근하고 싶다면 valueOf() 메소드를 이용합니다.
FourDevas cr = FourDevas.valueOf("청" + "룡");
System.out.println(cr);
// 청룡
상수는 보통 이름과 값이 같지만 생성자와 getter를 만들어서 상수에 부수 속성을 지정할 수도 있습니다. 상수 선언시 이름 옆에 소괄호를 붙여 부수 속성을 설정합니다. 부수 속성은 한 개 뿐만 아니라 여러개를 지정할 수도 있습니다.
package blog.enex;
public enum Appliance {
ICE("냉장고"),
WATER("식기세척기", "세탁기"),
HEAT("전기장판", "온풍기");
private String[] appList;
// 생성자
private Appliance(String... ss) {
this.appList = ss;
}
public String getAppList() {
String outStr = "";
for(String s : this.appList) {
outStr += s + " ";
}
return outStr;
}
}
package blog.enex;
public class EnumTest3 {
public static void main(String[] args) {
for(Appliance a : Appliance.values()) {
System.out.println(a + ": " + a.getAppList());
}
}
}
ICE: 냉장고 WATER: 식기세척기 세탁기 HEAT: 전기장판 온풍기
예제는 영어로 된 문장을 모스 부호로 해석하는 프로그램입니다. 다소 비약이 있는 코드이지만 enum에 대한 예제로 봐주시기 바랍니다.
public enum EngToMorse {
A(".-"),
N("-."),
B("-..."),
O("---"),
C("-.-."),
P(".--."),
D("-.."),
Q("--.-"),
E("."),
R(".-."),
F("..-."),
S("..."),
G("--."),
T("-"),
H("...."),
U("..-"),
I(".."),
V("...-"),
J(".---"),
W(".--"),
K("-.-"),
X("-..-"),
L(".-.."),
Y("-.--"),
M("--"),
Z("--..");
private String morseCode;
EngToMorse(String morseCode){
this.morseCode = morseCode;
}
public String getMorseCode() {
return morseCode;
}
}
package blog.enex;
public class MorseTest {
public static void main(String[] args) {
String exStr = "ArE yoU sERioUs";
String outCode = "";
// 모스부호에서 글자간: 띄어쓰기 하나, 단어 사이: 띄어쓰기 둘(원칙)
for(char c : exStr.toCharArray()) {
if(c != ' ') {
outCode += EngToMorse.valueOf(String.valueOf(c).toUpperCase()).getMorseCode();
outCode += " ";
} else if (c == ' ') {
outCode += " ";
}
}
System.out.println(outCode);
}
}
.- .-. . -.-- --- ..- ... . .-. .. --- ..- ...





0개의 댓글