Enum
κΈ°λ³Έμ μΌλ‘ cλ c++μ enumκ³Ό κ°μ κΈ°λ₯μ μννλ ν΄λμ€
λ‘ JDK 1.5
μ΄νμ μκΈ΄ ν΄λμ€μ΄λ€.
cμΈμ΄μ C99
μ΄μ μλ boolean
νμ
μ μ 곡νμ§ μμκΈ° λλ¬Έμ λ€μκ³Ό κ°μ΄ μ¬μ©νκ³ λ νμλ€.
Javaμμμ Enum νΉμ§
Enum λΉκ΅μμ κ°μ΄ μλ νμ
κΉμ§λ 체ν¬
κ° κ°λ₯νκ³ Enumμ μμκ°μ΄ μ¬μ μ λμ΄λ λ€μ μ»΄νμΌνμ§ μλλ€.
enum μ μνλ λ°©λ²
enum ν€μλλ₯Ό μ΄μ©νμ¬ μ μλ₯Ό ν μ μκ³ μ μλ₯Ό μ΄λμ νλλμ λ°λΌ λΆλ₯λ₯Ό ν΄λ³΄μλ©΄ 3κ°μ§μ λλ‘ λΆλ₯ν μ μλ€.
1. λ³λμ Java νμΌλ‘ μ μ
2. ν΄λμ€ μμ μ μ
3. ν΄λμ€ λ°μ μ μ
μ μ μμΉμ λ°λΌ enumκ°μ²΄κ° μμ±λ μμΉκ° λ€λ₯Έ κ²μ λ³Ό μ μλ€.
enum μ¬μ©
Money.DOLLAR
μ κ°μ΄ Enumμ΄λ¦.μμλͺ
μΌλ‘ μ¬μ©μ ν μ μμΌλ©° Money money = Money.DOLLAR
μ κ°μ΄ λ³μμ ν λΉ ν΄μ€ μλ μλ€.
Cμ enumμ κ° μμκ° intνμΌλ‘ μ μ₯λμ΄ μ°μ μ°μ°λ κ°λ₯νκ³ μλμ κ°μ΄ μμ리ν°λ΄κ³Ό λΉκ΅ν΄λ κ°κ² λμ€λ λ¬Έμ λ μκΈ΄λ€.
Enumμ΄ μμ λ Javaμμλ μ΄μ λΉμ·νκ² classμ private final static int
λ₯Ό μ΄μ©ν΄μ μμκ°μ μ μ ν μ μμλ€.
νμ§λ§ μ΄ λ°©λ²μ κ°λ μ±μλ μ’μ§ μκ³ λ³μλͺ μ΄ κ²ΉμΉ μ μκ±°λ μμ리ν°λ΄κ³Ό λΉκ΅κ° λλ€λ λ¬Έμ μ μ΄ μλ€.
Javaμ Enumμ κ° μμκ° μμ κ·Έ μ체λ‘μ¨ μλμ νκ³ μλ£νμ΄ λ€λ₯΄κΈ° λλ¬Έμ μλμ κ°μ΄ λΉκ΅νλ €κ³ νλ©΄ compile errorκ° λ¬λ€.
μμμ λ€λ₯Έ κ° μΆκ°
ν΄λμ€μ μμ±μ
μ κ°μ λ°©λ²μΌλ‘ κ°μ ν λΉ ν΄μ€ μ μμΌλ©°, getterλ₯Ό μ μν΄μ κ°μ μ°Έμ‘° ν μλ μλ€.
μ΄λ μμ±μλ PRIVATE μμ±μΌλ‘ μμ±ν΄μ£Όμ΄μΌ νλ€.
enumνμ
μ κ³ μ λ μμλ€μ μ§ν©μ΄λ―λ‘ μ»΄νμΌ νμ
μ λͺ¨λ κ°μ μκ³ μμ΄μΌνκΈ° λλ¬Έμ λ€λ₯Έ ν΄λμ€μμ λμ μΌλ‘ κ°μ μ ν΄μ€ μ μκΈ° λλ¬Έμ μμ±μλ₯Ό privateλ‘ μ€μ ν΄μΌ νκ³ final
κ³Ό λ€λ¦μ΄ μμ΄μ§λ€.
enumμ΄ μ 곡νλ λ©μλ
values()
Enumμ λͺ¨λ μμλ₯Ό λ°°μ΄λ‘ λ§λ€μ΄ λ°νν΄μ£Όλ ν¨μ
Money[]
ννμ νμ
μΌλ‘ λ°νμ΄ λλ€.
valuesOf()
맀κ°λ³μλ‘ String
νμ΄ μ€λ©° μ΄ λ§€κ°λ³μμ λμΌν μ΄λ¦μ μμλ₯Ό μ°Ύμ μμλ₯Ό λ°ν νκ³ μλ€λ©΄ IllegalArgumentException
μμΈλ₯Ό λ°μμν¨λ€.
ordianal()
enum μμκ° 0λΆν° μμνμ¬ μ μλ μμλ₯Ό λ°ν(int)νλ ν¨μ
ordinalμ Enumμ μ μν μμλ₯Ό λ°ννκΈ° λλ¬Έμ cλμ²λΌ μμλΌκ³ μκ°νλ©° μ¬μ©νμ§ λ§μ.
ordinalμ EnumSetμ΄λ EnumMap, JPAμμ μ κ·ΌνκΈ° μν λ΄λΆ ν¨μλ‘ κ°λ°μλ κ±°μ μ¬μ©ν μΌμ΄ μλ λ©μλμ΄λ€.
μ μ μμκ° λ°λκ±°λ κ°μ΄ μΆκ° λλ©΄ μ ν λ€λ₯Έ κ²°κ³Όκ° λμ€κΈ° λλ¬Έμ΄λ€.
κ·Έλ° μ΄μ λ‘ Spring Data JPAμμ defaultλ ordinalμ΄κΈ° λλ¬Έμ Enumμμκ° λ°λλ€λ©΄ κ°μ΄ μμ λ¬λΌμ§λ€. 컬λΌμΌλ‘ Enumμ μ¬μ©νλ©΄ @Enumeratedλ₯Ό μ΄μ©ν΄ StringμΌλ‘ μ¬μ©νμ.
java.lang.Enum
enum ν΄λλ κΈ°λ³Έμ μΌλ‘ java.lang.Enum
λΌλ λΆλͺ¨ ν΄λμ€λ₯Ό μμ λ°κ³ μκ³ μ΄λ Object
λ₯Ό μμλ°κ³ Comparable
κ³Ό Serializable
λ₯Ό implementsνκ³ μλ€.
protected
νμΌλ‘ μμ±μλ₯Ό νλ κ°μ§κ³ μλλ° μ΄λ κ°λ°μκ° νΈμΆν μ μκ³ μ»΄νμΌλ¬μ μν΄ enum ν€μλ
μ λ°μνμ¬ μμ±νκΈ° μν¨μ΄λ€.
μ΄ ν΄λμ€ λ΄μ μλ public
λ©μλ μ€ Override
ν΄μ μ¬μ©ν λ§ν λ©μλλ‘ κΈ°λ³Έμ μμ μ΄λ¦
μ λ°ννμ§λ§, enum
μ μμ±μ μΆκ° κ°
μ μ§μ νμ¬ μμ±νλ€λ©΄ μ΄λ₯Ό Override
ν΄μ€ μ μλ€.
μ»΄νμΌ μμ κ°μ²΄ μμ±
enum ν€μλλ₯Ό μ¬μ©νμ¬ μ΄κ±°νμ μμ±νλ©΄ μ»΄νμΌ μμ μμ κ°μ΄ μ μκ° λλ€.
EnumSet
Set μΈν°νμ΄μ€λ₯Ό ꡬν
EnumSetμ abstract
ν€μλκ° μμ λΆμ΄ κ°μ²΄ μμ±μ΄ λΆκ°λ₯νκ³ of()
μ κ°μ μΆμ ν©ν 리 λ©μλμμ μ¬μ©νλ noneOf(class<E> elementType)
λ©μλκ° μ‘΄μ¬νμ¬ μ΄λ₯Ό ν΅ν΄ ꡬν κ°μ²΄
λ₯Ό λ°μ μ μλ€.
noneOf() λ©μλ
λ₯Ό 보면 μκ² μ§λ§ EnumSet
κ°μ²΄λ₯Ό λ°ννλ κ²μ΄ μλ μ΄λ₯Ό μμλ°μ ν΄λμ€λ€
μ λ°ννκ³ μλ€.
μ΄ λ ν΄λμ€ λͺ¨λ private
μμ±μ΄λ―λ‘ μ§μ μ¬μ©ν μ μλ€.
μ¬μ©ν ν¬κΈ°μ λ§κ² μ ν©ν ꡬν κ°μ²΄λ₯Ό κ³¨λΌ μ€λ€.
Enumμ μμλ€μ νλνλ Setμ λ΄λ νμλ₯Ό νΌν μ μλ€.
EnumSet λ΄λΆ ννμ
λΉνΈ 벑ν°
λ‘ ννλλ€. (μμ κ°μκ° 64κ° μ΄νλΌλ©΄long
λ³μ νλλ‘ νννλ€.)Enum μμκ° μ μΈλ μμ, μ¦ ordinal() λ©μλμ λ°νλ μμλ‘ μννλ€.
EnumSet iteratorλ μ½ν μΌκ΄μ±μ μ μ§νμ¬
ConcurrentModificationException
μ λ°μμν€μ§ μλλ€.null μμλ μ½μ μ΄ λμ§ μλλ€.
λκΈ°ν
κ° λμ§ μλλ€.
λ©μλ
EnumSet.allOf(Class elementType) : 맀κ°λ³μμ νμ μ λͺ¨λ μμλ₯Ό ν¬ν¨ν
EnumSet
μ λ°νEnumSet.noneOf(Class elementType) : 맀κ°λ³μμ νμ μ λΉμ΄μλ
EnumSet
λ°νEnumSet.of(E e1, E e2 ...) : μ§μ ν 맀κ°λ³μλ₯Ό ν¬ν¨ν
EnumSet
μ λ°νκ·Έ μΈ
java.util.AbstractSet
,java.util.AbstractCollection
,java.lang.Object
,java.util.Set
μΌλ‘ λΆν° λ©μλλ€μ μμλ°κ³ μλ€.μ€λ³΅ κ²μ¬λ₯Ό μν
equals()
,hashCode()
,add()
,remove()
,size()
,toArray() => Object[] λ°ν
,iterator()
λ± μ¬μ© κ°λ₯
EnumMap
Map μΈν°νμ΄μ€λ₯Ό ꡬν
Enumμ Keyλ‘ μ΄μ©νλ Mapμ΄λ€.
Enum μμλ‘ nullμ κ°μ μ μκΈ° λλ¬Έμ nullμ keyλ‘ κ°μ§ λͺ»νλ€.
Enumμ μ ν΄μ§ μμλ₯Ό μ¬μ©νκ³ λ¨μΌ κ°μ²΄μ΄κΈ° λλ¬Έμ ν΄μ±νμ§ μκ³ μ΄λ―Έ μμκ° μ ν΄μ Έμμ΄ μ±λ₯μ΄ μ’λ€.
keyμ valueκ° λ°°μ΄λ‘ ꡬμ±λμ΄μλ€.
EnumMapμ keyλ
ordianl
λ‘ κ΄λ¦¬ λκΈ° λλ¬Έμ iteratorλ μ½ν μΌκ΄μ±μ μ μ§νμ¬ConcurrentModificationException
μ λ°μμν€μ§ μλλ€.λκΈ°ν
κ° λμ§ μλλ€.
λ©μλ
μμ±μ :
new
ν€μλλ₯Ό μ΄μ©ν΄ μμ±ν μ μκ³ μΌλ° Mapλ€κ³Ό λ€λ₯΄κ²enum νμ
μ νλΌλ―Έν°λ‘ λ겨주μ΄μΌ νλ€.Map<Money,Integer> map = new EnumMap<>(Money.class);
clear() : λͺ¨λ μμ μμ
get(Object key) : keyμ ν΄λΉνλ value 리ν΄
put(K key, V value) : mapμ λ°μ΄ν° μ λ ₯
remove(Object key) : ν΄λΉνλ keyκ° μλ€λ©΄ μμ
equals(Object object) : κΈ°μ€ Mapκ³Ό κ°μμ§ λΉκ΅
containsKey(Object key) / containsValue(Object value) : ν΄λΉνλ keyμ value κ° μλ€λ©΄ true λ°ν
size() : Mapμ μμ κ°μ λ°ν
keySet() : Mapμ μλ λͺ¨λ keyλ€μ Set viewλ₯Ό λ°ννλ€. (λͺ¨λ keyλ€μ 보μ¬μ€λ€.)
values() : Mapμ μλ valueλ€μ Collection viewλ₯Ό λ°ννλ€. (λͺ¨λ κ°λ€μ 보μ¬μ€λ€.)
μΆκ° λ΄μ©
type safety
Runtimeμ΄ μλ Complieνμμ λ¬Έμ λ₯Ό μ‘μ μ μλ κ²μΌλ‘ JVMμ μ»΄νμΌν λ, νΉμ λ°μ΄ν° νμ μ μ μ μμΌλ RUNμμ νΉμ λ°μ΄ν°κ° μ‘΄μ¬ νμ§ μλλ€κ±°λ νλ λ¬Έμ κ° μκΈΈ μ μλ€.
Enumμ μ¬μ©νλ©΄ μ€νλ°©μ§λ₯Ό ν μ μκ³ , μ»΄νμΌνμμ μλ¬λ₯Ό μ‘μμ£ΌκΈ° λλ¬Έμ λλ²κΉ λ μ¬μμ§λ€.
Enumμμ κ° μ
ν
ν
Enumμ κ°μ μΆκ°ν΄μ€ λ 1,2,3κ°μ΄ μ’μ μ«μμ λ²μκ° μλ 10,20,30 κ°μ΄ λ²μλ₯Ό λκ³ μ μΈν΄μ£Όμ.
μΈμ μ΄λ€μ΄μ μμ Enumμ κ°μ μ¬μ΄μ μΆκ° ν΄μ€μ§ λͺ¨λ₯΄κΈ° λλ¬Έμ΄λ€.
Reference
https://www.nextree.co.kr/p11686/
http://cris.joongbu.ac.kr/course/java/api/java/lang/Enum.html
https://javarevisited.blogspot.com/2014/03/how-to-use-enumset-in-java-with-example.html#axzz6kSbFjAwM
Last updated