Javaμ enumμ λ΄λΆμ μΌλ‘ ν΄λμ€μ²λΌ λμνλ©°, μμ±μμ νλλ₯Ό κ°μ§ μ μμ
νμ§λ§ enumμ μΈμ€ν΄μ€ μμ± λ°©μμ μΌλ° ν΄λμ€μ λ€λ¦ β κ°λ°μκ° μ§μ newλ₯Ό μ¬μ©ν΄ μμ±ν μ μκ³ , JVMμ΄ λ―Έλ¦¬ μμ±ν΄μ κ΄λ¦¬ν¨.
public enum Day {
MONDAY("μμμΌ"), TUESDAY("νμμΌ"), WEDNESDAY("μμμΌ");
private final String koreanName; // νλ μ μΈ
// μμ±μ (private μλ΅ κ°λ₯)
Day(String koreanName) {
this.koreanName = koreanName;
}
public String getKoreanName() {
return koreanName;
}
}
public class EnumTest {
public static void main(String[] args) {
Day today = Day.MONDAY;
System.out.println(today.getKoreanName()); // "μμμΌ"
}
}
Day μ΄κ±°νμ΄ ν΄λμ€λ‘ λ³νλ¨.
μ»΄νμΌ μ, MONDAY, TUESDAY, WEDNESDAYλ μ μ μμ κ°μ²΄(static final)λ‘ μ μΈλ¨.
JVMμ΄ ν΄λμ€ λ‘λ μ λͺ¨λ enum μΈμ€ν΄μ€λ₯Ό 미리 μμ±νκ³ , κ°κ°μ μμ±μλ₯Ό νΈμΆνμ¬ νλκ°μ λ°μΈλ©ν¨.
μ€ν μ, Day.MONDAYλ₯Ό νΈμΆνλ©΄ μ΄λ―Έ μμ±λ MONDAY μΈμ€ν΄μ€λ₯Ό λ°ν.
μ enumμ μ»΄νμΌνλ©΄ λ€μκ³Ό κ°μ final classλ‘ λ³νλ¨ (JVM λ΄λΆ μ½λ ꡬ쑰)
public final class Day extends Enum<Day> {
public static final Day MONDAY = new Day("MONDAY", 0, "μμμΌ");
public static final Day TUESDAY = new Day("TUESDAY", 1, "νμμΌ");
public static final Day WEDNESDAY = new Day("WEDNESDAY", 2, "μμμΌ");
private final String koreanName;
private Day(String name, int ordinal, String koreanName) {
super(name, ordinal); // Enum λΆλͺ¨ ν΄λμ€μ μμ±μ νΈμΆ
this.koreanName = koreanName;
}
public String getKoreanName() {
return koreanName;
}
}
enumμ JVMμμ final class λ‘ λ³νλ¨
MONDAY< TUESDAY, WEDNESDAYλ static final κ°μ²΄λ‘ 미리 μμ±λ¨.
κ° κ°μ²΄μ μμ±μ νΈμΆμ this.koreanName νλκ° λ°μΈλ©λ¨.
super(name, ordinal) -> Enum λΆλͺ¨ ν΄λμ€μ μμ±μ νΈμΆ (nameκ³Ό ordinal μλκ΄λ¦¬)
κ°λ°μκ° new Day(...)λ‘ μ§μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμ.