열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입
public enum Day {
MON, TUE, WED, THU, FRI, SAT, SUN
}
단순하게 요일을 열거한 Enum
BUT, 각각의 요소들이 특정한 값을 갖게 하고 싶다면? (ex. 각 요일의 풀네임)
public enum Day {
MON("Monday"),
TUE("Tuesday"),
WED("Wednesday"),
THU("Thursday"),
FRI("Friday"),
SAT("Saturday"),
SUN("Sunday")
;
private final String label;
Day(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
}
System.out.println(Day.MON.name()); // MON
System.out.println(Day.MON.label()); // Monday
예시1
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum01 {
public static void main(String[] args) {
Rainbow[] arr = Rainbow.values();
for (Rainbow rb : arr) {
System.out.println(rb); // RED ORANGE YELLOW ...
}
}
}
예시2
public enum Type {
WALKING("워킹화"),
RUNNING("러닝화"),
TRACKING("트래킹화"),
HIKING("등산화");
final private String shoe;
private Type(Stirng shoe) {
this.shoe = shoe;
}
public String getShoe() {
return shoe;
}
}
public class Shoes {
public static void main(String[] args) {
for(Type type : Type.values()){
System.out.println(type.getShoe()); // 워킹화 러닝화 트래킹화 ...
}
}
}
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET }
public class Enum02 {
public static void main(String[] args) {
Rainbow rb = Rainbow.valueOf("GREEN");
System.out.println(rb); // GREEN
}
}
Enum은 자체적으로 name()값으로 Enum값을 찾는 valudOf() 메소드 제공
1) 직접 Enum values() 순회하며 찾기
public enum Day {
MON("Monday"),
TUE("Tuesday"),
WED("Wednesday"),
THU("Thursday"),
FRI("Friday"),
SAT("Saturday"),
SUN("Sunday")
;
private final String label;
Day(String label) {
this.label = label;
}
public static Day valueOfLabel(String label) {
return Arrays.stream(values())
.filter(value -> value.label.equals(label))
.findAny()
.orElse(null);
}
}
2) 캐싱해서 순회 피하기
public enum Day {
MON("Monday"),
TUE("Tuesday"),
WED("Wednesday"),
THU("Thursday"),
FRI("Friday"),
SAT("Saturday"),
SUN("Sunday")
;
private final String label;
Day(String label) {
this.label = label;
}
private static final Map<String, Day> BY_LABEL =
Stream.of(values()).collect(Collectors.toMap(Day::label, e -> e));
public static Day valueOfLabel(String label) {
return BY_LABEL.get(label);
}
public enum Day {
MON("Monday", 10),
TUE("Tuesday", 20),
WED("Wednesday", 30),
THU("Thursday", 40),
FRI("Friday", 50),
SAT("Saturday", 60),
SUN("Sunday", 70)
;
private final String label;
private final int number;
Day(String label, int number) {
this.label = label;
this.number = number;
}
public String label() {
return label;
}
public int number() {
return number;
}
private static final Map<String, Day> BY_LABEL =
Stream.of(values()).collect(Collectors.toMap(Day::label, Function.identity()));
private static final Map<Integer, Day> BY_NUMBER =
Stream.of(values()).collect(Collectors.toMap(Day::number, Function.identity()));
public static Day valueOfLabel(String label) {
return BY_LABEL.get(label);
}
public static Day valueOfNumber(int number) {
return BY_NUMBER.get(number);
}
}
public enum WeekDay {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
public String toString() {
return name().charAt(0) + name().substring(1).toLowerCase();
}
}
WeekDay.MONDAY.name() // "MONDAY"
WeekDay.MONDAY.toString() // "Monday"
private enum ColdDrink {
PEPSI("Pepsi"), COKE("Coca Cola"), SPRITE("Sprite");
private String brandname;
private ColdDrink(String brand) {
this.brandname = brand;
}
@Override
public String toString(){
return brandname;
}
}
public static void main(String args[]) {
//Converting Enum to String by using name() method
//by default print mehtod calls toString() of enum
ColdDrink[] drinks = ColdDrink.values();
for (ColdDrink drink : drinks) {
System.out.printf("String to Enum example using name : %s%n", drink.name());
}
//Converting Enum to String using toString() method
for (ColdDrink drink : drinks) {
System.out.println("String to enum conversion using toString() : " + drink);
}
}
}
Output:
String to Enum example using name: PEPSI
String to Enum example using name: COKE
String to Enum example using name: SPRITE
String to enum conversion using toString() : Pepsi
String to enum conversion using toString() : Coca Cola
String to enum conversion using toString() : Sprite
참고
http://www.tcpschool.com/java/java_api_enum
https://bcp0109.tistory.com/334
https://itmining.tistory.com/149
https://velog.io/@nhj2927/Java-Enum.name-vs-Enum.toString
https://www.java67.com/2012/08/how-to-convert-enum-to-string-in-java.html