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개의 댓글