-
[Java] Enumμ΄λ?Android/Java 2021. 2. 14. 18:43λ°μν
- μ΄ κΈμ "μλ° μ¨λΌμΈ μ€ν°λ" λ΄μ©μ 곡λΆνμ¬ μμ±ν κΈμ λλ€.
μμμ νν
κΈ°μ‘΄μ μμλ₯Ό ννν λλ ν΄λΉ ν΄λμ€ λ΄λΆμ final static String, final static intμ κ°μ΄ μ μλ₯Ό νμμ΅λλ€.
μ΄μ²λΌ μ μνλ λ°©μμ μμκ° λ§μμ§ κ²½μ° κ°λ μ±μ΄ λ¨μ΄μ§κ³ , μ΄λ€ κ²μ κ΄ν μμμΈμ§ νμ νκΈ°κ° μ΄λ ΅μ΅λλ€.
κ·Έλμ μλ‘μ΄ μμ ν΄λμ€ λλ μμ μΈν°νμ΄μ€λ₯Ό λ§λ€μ΄μ μ μλ₯Ό νμ§λ§ μ΄ μμλ μ¬λ¬κ°μ§ λΆνΈν¨μ΄ μ‘΄μ¬νμμ΅λλ€.
interface UNIVERSITY{ int SEOUL = 1; int YONSEI = 2; int KOREA = 3; } interface MAJOR{ int KOREAN = 1; int MATH = 2; int ENGLISH = 3; int SCIENCE = 4; } public class EnumExample { public static void main(String[] args) { if(UNIVERSITY.SEOUL == MAJOR.KOREAN){ System.out.println("λ μμλ κ°μ΅λλ€"); } int major = MAJOR.MATH; switch (major){ case MAJOR.KOREAN: System.out.println("κ΅μ΄ μ 곡"); break; case MAJOR.MATH: System.out.println("μν μ 곡"); break; case MAJOR.ENGLISH: System.out.println("μμ΄ μ 곡"); break; case MAJOR.SCIENCE: System.out.println("κ³Όν μ 곡"); break; } } }
λ€μ μ½λλ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μμλ₯Ό νννμμ΅λλ€. ν ν΄λμ€ λ΄λΆμμ final static int μ κ°μ΄ νννλ κ²λ³΄λ€λ μ§ν©λΌλ¦¬ μμλ₯Ό λΆλ¦¬ν¨μΌλ‘μ¨ κ΅¬λ³νκΈ°κ° μ¬μμ‘μ΅λλ€. νμ§λ§ μ λ°©λ²μλ λ¬Έμ κ° μ‘΄μ¬νλλ° UNIVERSITYμ μμμ MAJOR μμμ λΉκ΅λΆλΆμ μμ΅λλ€. λ€λ₯Έ μ§ν©μ μμλΌλ¦¬λ λΉκ΅λ₯Ό νλ©΄ μλκΈ° λλ¬Έμ μ»΄νμΌ λ¨κ³μμ μλ¬λ₯Ό νμΈν μ μμ΄μΌ ν©λλ€. νμ¬ μ½λλ λ μμ intν νμ μ΄κ³ 1μ΄λΌλ κ°λ λμΌνκΈ° λλ¬Έμ μλ¬κ° λ°μνμ§ μμ΅λλ€. μ΄λ κ² μ½λλ₯Ό ꡬννκ² λλ©΄ λ°νμ λ¨κ³μμ μκΈ°μΉ λͺ»ν λ¬Έμ λ₯Ό λ§μ£ΌμΉκ² λ©λλ€.
class UNIVERSITY{ public static final UNIVERSITY SEOUL = new UNIVERSITY(); public static final UNIVERSITY YONSEI = new UNIVERSITY(); public static final UNIVERSITY KOREA = new UNIVERSITY(); } class MAJOR{ public static final MAJOR KOREAN = new MAJOR(); public static final MAJOR MATH = new MAJOR(); public static final MAJOR ENGLISH = new MAJOR(); public static final MAJOR SCIENCE = new MAJOR(); } public class EnumExample { public static void main(String[] args) { if(UNIVERSITY.SEOUL == MAJOR.KOREAN){ System.out.println("λ μμλ κ°μ΅λλ€"); } MAJOR major = MAJOR.MATH; switch (major){ case MAJOR.KOREAN: System.out.println("κ΅μ΄ μ 곡"); break; case MAJOR.MATH: System.out.println("μν μ 곡"); break; case MAJOR.ENGLISH: System.out.println("μμ΄ μ 곡"); break; case MAJOR.SCIENCE: System.out.println("κ³Όν μ 곡"); break; } } }
λ€μ μ½λλ μΈν°νμ΄μ€λ‘ μμ±ν λΆλΆμ ν΄λμ€λ‘ λ³κ²½νμμ΅λλ€. κ° μμμλ μμ μμ μ μΈμ€ν΄μ€ννμ¬ κ°μ ν λΉνμμ΅λλ€. μ΄λ‘ μΈν΄ μμμ§ν©μμ κ° μμλ€μ νμ μ λμΌνλ λ°μ΄ν°λ λ€λ₯΄κ² λ©λλ€. μμλ₯Ό μΈν°νμ΄μ€λ‘ μ μν κ²°κ³Όμ λ¬λ¦¬ UNIVERSITYμ μμμ MAJOR μμλ₯Ό λΉκ΅ν κ²½μ° μλ‘ λ€λ₯Έ λ°μ΄ν° νμ λΌλ¦¬ λΉκ΅ν μ μλ€λ λ©μμ§μ ν¨κ» μ»΄νμΌλ¨κ³μ μμΈκ° λ°μν©λλ€. λ°νμμμ λ°μν μ μλ μλ¬λ₯Ό μ»΄νμΌ λ¨κ³μμ 미리 μ μ μκΈ° λλ¬Έμ μ¬μ μ μ°¨λ¨ν μ μλ€λ μ₯μ μ΄ μκ²Όμ΅λλ€.
μ΄ λ°©λ²μλ λ¬Έμ κ° μ‘΄μ¬νλλ° switchλ¬Έμμ νΈνλ μ μλ νμ μ΄λΌλ λ©μμ§μ ν¨κ» μ»΄νμΌ μμΈκ° λ°μν©λλ€. μμλ₯Ό μ¬μ©ν λ switchλ¬Έμ μ¬μ©νμ§ λͺ»νλ©΄ κ°λ μ±μ΄ ν¬κ² μ νλλλ° μ΄λ₯Ό ν΄κ²°ν μ μλ μμ ννλ°©λ²μ΄ Enum ν΄λμ€μ λλ€.
Enumμ΄λ?
Enumμ Eumerationλ‘ μ΄κ±°νμ΄λΌκ³ λΆλ¦¬λ©°, μλ‘ μ°κ΄λ μμλ€μ μ§ν©μ μλ―Έν©λλ€.
μλ°μμ final static String, intμ κ°μ΄ λ¬Έμμ΄μ΄λ μ«μλ€μ λνλ΄λ κΈ°λ³Έμλ£νμ κ°μ EnumμΌλ‘ λ체ν΄μ μ¬μ©ν μ μμ΅λλ€.
μ μμμ λμ¨κ²μ²λΌ μΈν°νμ΄μ€λ ν΄λμ€λ‘ μμλ₯Ό μ μνλ κ²μ 보μνμ¬ IDEμ μ§μμ μ κ·Ήμ μΌλ‘ λ°κ³ νμ μμ μ±λ κ°μΆ μ μκ² λ©λλ€.
Enumμ νΉμ§
1. ν΄λμ€λ₯Ό μμμ²λΌ μ¬μ©ν μ μλ€.
enum Student{ KIM("SEOUL","KOREAN"), PARK("KOREA","MATH"), LEE("YEOSEI","SCIENCE"); private final String university; private final String major; private int number; // public μ μ»΄νμΌ μλ¬ λ°μ Student(String university, String major) { this.university = university; this.major = major; } }
Enum ν΄λμ€λ₯Ό ꡬνν μμ μ λλ€. μμ±μλ PublicμΌλ‘ ν κ²½μ° μ»΄νμΌ μλ¬κ° λ°μνμ¬ privateλ‘ μμ±ν΄μΌ ν©λλ€. Enumμ κ³ μ λ μμλ€μ μ§ν©μΌλ‘, λ°νμμ΄ μλ μ»΄νμΌνμμ λͺ¨λ κ°μ λν΄ μμμΌ ν©λλ€. μ¦, λ€λ₯Έ ν¨ν€μ§λ ν΄λμ€μμ Enum νμ μ μ κ·Όν΄μ λμ μΌλ‘ μ΄λ€ κ°μ μ ν΄μ€ μ μμ΅λλ€.
2. Enum ν΄λμ€λ₯Ό ꡬννλ κ²½μ° μμ κ°κ³Ό κ°μ΄ μ μΌνκ² νλμ μΈμ€ν΄μ€κ° μμ±λμ΄ μ¬μ©λλ€.
enum Student{ KIM("SEOUL","KOREAN"), PARK("KOREA","MATH"), LEE("YEOSEI","SCIENCE"); private final String university; private final String major; private int number; Student(String university, String major) { this.university = university; this.major = major; } public void plusnumber(){ this.number++; } }
Enum ν΄λμ€μμ μ μΈν μμλ€μ ν΄λμ€κ° λ‘λλ λ μμ±λμ΄ Sigleton ννλ‘ μ¬μ©λ©λλ€. μμ κ°μΌλ‘ μ μλμ§ μμ μΈμ€ν΄μ€ λ³μκ° μλ€λ©΄ λ©ν° μ°λ λ νλ‘κ·Έλλ° νκ²½μμ λ¬Έμ κ° λ°μν μ μμ΅λλ€. μ μμμ²λΌ number λ³μλ KIM μ΄λΌλ μΈμ€ν΄μ€μμ plusnumber λ©μλλ₯Ό ν΅ν΄ λ³κ²½ν μ μμ΅λλ€. νμ§λ§ μ¬λ¬ μ°λ λμμ Student.KIM μμλ₯Ό μ¬μ©ν κ²½μ° number λ³μλ 곡μ λκΈ° λλ¬Έμ μ‘°μ¬ν΄μΌ ν©λλ€.
3. μΈμ€ν΄μ€ μμ±κ³Ό μμμ λ°©μ§νμ¬ μμκ°μ νμ μμ μ±μ΄ 보μ₯λ©λλ€.
public class EnumExample { public static void main(String[] args) { // java.lang.enumμ toString λ©μλ μμ System.out.println(Student.KIM.toString()); } }
νΉμ§1μμ μ€λͺ νλ―μ΄ Enum ν΄λμ€μ μμ±μλ₯Ό privateλ‘ μ μΈνκΈ° λλ¬Έμ λ€λ₯Έ ν¨ν€μ§λ ν΄λμ€μμ λμ μΌλ‘ κ°μ ν λΉν μ μκΈ° λλ¬Έμ νμ μμ μ±μ΄ 보μ₯λ©λλ€. λν λͺ¨λ Enum ν΄λμ€λ λ΄λΆμ μΌλ‘ java.lang.enum ν΄λμ€μ μν΄ μμλ©λλ€. μλ°λ λ€μ€μμμ μ§μνμ§ μκΈ° λλ¬Έμ Enumμ λ€λ₯Έ ν΄λμ€λ₯Ό μμλ°μ μ μμ΅λλ€. νμ§λ§ λ€μν μΈν°νμ΄μ€λ€μ ꡬνν μ μμ΅λλ€.
java.lang.Enum ν΄λμ€
Enum ν΄λμ€λ λͺ¨λ μλ° μ΄κ±°νμ κΈ°λ³Έ μ‘°μ ν΄λμ€μ λλ€.
Enum ν΄λμ€μλ μ΄κ±°νμ λ€λ£¨κΈ° μν λ€μν λ©μλλ€μ΄ μ‘΄μ¬ν©λλ€.
Enum λν λ©μλ
1. values() : Enum ν΄λμ€μμ κ°μ§κ³ μλ λͺ¨λ μμ μΈμ€ν΄μ€λ₯Ό λ°°μ΄μ λ΄μ λ°νν©λλ€.
public class EnumExample { public static void main(String[] args) { Student[] values = Student.values(); for(int i=0;i<values.length;i++){ System.out.println(values[i]); // java.lang.enum toString λ©μλ νΈμΆ System.out.println(values[i].getNumber()); } // Kim, 0, PARK, 0, LEE, 0 } }
2. valueOf() : Stringμ 맀κ°λ³μλ‘ λ°μ μΌμΉνλ μμ μΈμ€ν΄μ€λ₯Ό λ°νν©λλ€. (μμ κ²½μ° λ°νμ μλ¬ λ°μ)
public class EnumExample { public static void main(String[] args) { System.out.println(Student.valueOf("LEE")); System.out.println(Student.valueOf("LEE").getNumber()); // RuntimeException try{ System.out.println(Student.valueOf("OH")); }catch (IllegalArgumentException e){ System.out.println("λ°νμ μλ¬"); } // LEE, 0, λ°νμ μλ¬ } }
3. ordinal() : Enum ν΄λμ€ λ΄λΆμ μλ μμλ€μ μΈλ±μ€λ₯Ό λ°νν©λλ€.
public class EnumExample { public static void main(String[] args) { Student[] values = Student.values(); for(int i=0;i<values.length;i++){ System.out.println(values[i]+"μ index : "+values[i].ordinal()); } /** * KIMμ index : 0 * PARKμ index : 1 * LEEμ index : 2 */ } }
EnumSet
EnumSetμ enum ν΄λμ€μ μμλ‘ κ΅¬νλ νΉλ³ν Set 컬λ μ μ λλ€.
AbstractSetμ AbstractCollectionμ λλΆλΆ Setκ³Ό Collection μΈν°νμ΄μ€μ λ©μλλ₯Ό μ 곡νμ§λ§, EnumSetμ λλΆλΆ μ€λ²λΌμ΄λ©νμ¬ μ¬μ©ν©λλ€.
EnumSetμ μ€μ§ enum μμλ§ ν¬ν¨λ μ μμΌλ©°, κ°μ enumμ μν΄μΌ ν©λλ€.
null κ°μ΄ ν¬ν¨λ μ μκ³ , thread-safe νμ§ μμμ νμμ λκΈ°νλ₯Ό ν΄μΌν©λλ€.
enum ν΄λμ€ λ΄λΆμ μ μΈλ μμλλ‘ EnumSetμ ν¬ν¨λ©λλ€.
fail-safe iteratorλ₯Ό μ¬μ©νμ¬ ConcurrnetModificationExceptionμ΄ λ°μνμ§ μμ΅λλ€.
EnumSetμ λͺ¨λ λ©μλλ μ°μ λΉνΈ μ°μ°μ μ¬μ©νμ¬ κ΅¬νλκΈ° λλ¬Έμ λ§€μ° λΉ λ₯΄κ² μ€νλλ€λ μ₯μ μ΄ μμ΅λλ€.
EnumSet μμ
public class EnumExample { public static void main(String[] args) { EnumSet<Student> Allset = EnumSet.allOf(Student.class); Iterator<Student> iterator = Allset.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } // KIM, PART, LEE EnumSet<Student> Someset = EnumSet.of(Student.LEE,Student.PARK); iterator = Someset.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } // PART, LEE EnumSet<Student> Noneset = EnumSet.noneOf(Student.class); if(Noneset.contains(Student.PARK)){ System.out.println("EnumSet λ΄λΆμ PARKμ΄ μμ΅λλ€"); }else{ System.out.println("EnumSet λ΄λΆμ PARKμ΄ μμ΅λλ€"); } Noneset.add(Student.PARK); iterator = Noneset.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } // EnumSet λ΄λΆμ PARKμ΄ μμ΅λλ€. PART } }
λ°μν'Android > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] Java IO, NIO (0) 2021.02.22 [Java] Annotation, Meta dataλ? (0) 2021.02.19 [Java] μλ° μ°λ λ κ΅μ°©μν(deadlock) (2) 2021.02.07 [Java] μλ° μ°λ λ μν, μ°μ μμ(State, Priority) (0) 2021.02.05 [Java] μλ° μ°λ λ μμ±(Thread, Runnable) (4) 2021.02.02