2023. 1. 3. 11:39γJAVA/Effective JAVA
item01. μμ±μ λμ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό κ³ λ €νλΌ.
"p9. μ΄κ±° νμ μ μΈμ€ν΄νΈκ° νλλ§ λ§λ€μ΄μ§μ 보μ₯νλ€."
μ΄κ±° νμ μ΄λ?
: μλ‘ μ°κ΄λ μμμ μ§ν©μ μ μ₯νλ μλ£ν, μμ λͺ©λ‘μ λ΄μ μ μλ λ°μ΄ν° νμ
νμ λ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν μλ£νμΌλ‘ κ°μ μ νν μ μλ€.
μ΄κ±° νμ μ νΉμ ν λ³μκ° κ°μ§ μ μλ κ°μ μ ν ν μ μλ€.
OrderStatusλΌλ Enum μ PREPARRING, SHIPPED, DELIVERING, DELIVERED μ΄λ κ² κ°μ μ νλ€λ©΄
Orderμμ OrderStatus κ°μ 4κ°μ§ μν κ° λ§κ³ λ€λ₯Έ κ°μ μ λ ₯ν μ μλλ‘ κ°μ μ νν μ μλ€.
μ΄κ±°νμ μ μ¬μ©νμ§ μκ³ , κΈ°λ³Έ μλ£νμΌλ‘ μ΄λ κ² μ§μ ν΄μ£Όλ©΄ 200 λ± λ€λ₯Έ κ°μ΄ λ€μ΄κ° μ μκΈ° λλ¬Έμ Enumμ μ¬μ©νλκ±Έ κΆμ₯νλ€.
* μ΄κ±°νμ μ λμΌ JVMλ΄μμ μΈμ€ν΄μ€κ° νλλ§ λ§λ€μ΄μ§μ 보μ₯νκΈ° λλ¬Έμ μ±κΈν€ ν¨ν΄μ ꡬνν λ μ¬μ©νκΈ°λ νλ€.
Enumμ μλ°μ ν΄λμ€μ²λΌ μμ±μ, λ©μλ, νλλ₯Ό κ°μ§ μ μλκ°?
Enumμ μ¬μ€ ν΄λμ€μ΄κΈ° λλ¬Έμ μμ±μλ₯Ό κ°μ§μλ μκ³ , λ©μλλ₯Ό μμ±ν μλ μμΌλ©°, νλλ₯Ό κ°μ§μλ μλ€.
Enumμ΄ μ 곡νλ λ©μλ
valueOf()
: λ§€κ° κ°μΌλ‘ μ£Όμ΄μ§λ λ¬Έμμ΄κ³Ό λμΌν λ¬Έμμ΄μ κ°μ§λ μ΄κ±° κ°μ²΄λ₯Ό 리ν΄νλ€.
-> μ΄ λ©μλλ μΈλΆλ‘λΆν° λ¬Έμμ΄μ μ λ ₯λ°μ μ΄κ±° κ°μ²΄λ‘ λ³νν λ μ μ©νκ² μ¬μ©ν μ μλ€.
values()
: μ΄κ±° νμ μ λͺ¨λ μ΄κ±° κ°μ²΄λ€μ λ°°μ΄λ‘ λ§λ€μ΄ 리ν΄νλ€.
name()
: μ΄κ±° κ°μ²΄κ° κ°μ§κ³ μλ λ¬Έμμ΄μ 리ν΄νλ λ©μλ.
ordinal()
: μ 체 μ΄κ±° κ°μ²΄ μ€ λͺλ²μ§Έ μ΄κ±° κ°μ²΄μΈμ§ μλ €μ£Όλ λ©μλ (0λ²λΆν° μμ)
enumμ κ°μ == μ°μ°μλ‘ λμΌμ±μ λΉκ΅ν μ μλκ°?
: Yes
Enum κ°μ ==μ°μ°μ μ¬μ©μ κΆμ₯νλ€.
μλνλ©΄ equals()λ₯Ό μ¬μ©νλ©΄ enumμ κ°μ΄ null μ΄λ©΄ NPEκ° λ°μνλλ° == μ°μ°μλ NULLμ΄λ©΄ κ·Έλ₯ κ°μ§ μλ€λ‘ NPE λ°μνμ§ μκΈ° λλ¬Έμ΄λ€.
EnumSet
: EnumSetμ enum ν΄λμ€λ‘ μλνκΈ° μν΄ νΉνλ Set 컬λ μ μ΄λ€.
EnumSetμ μ΄κ±°ν κ°λ§ ν¬ν¨ν μ μκ³ , λͺ¨λ κ°μ λμΌν μ΄κ±°νμ μ΄μ΄μΌ νλ€.
allOf() : λͺ¨λ μμλ₯Ό ν¬ν¨νλ EnumSet λ§λ€ μ μλ€.
of() : λ€μ΄κ° μμλ₯Ό μ§μ μ λ ₯νμ¬ EnumSet λ§λ€ μ μλ€.
noneOf() : λΉ EnumSetμ λ§λ€ μ μλ€.
add() : EnumSetμ μμ μΆκ°ν μ μλ€.
contains() : νΉμ μμκ° EnumSetμ ν¬ν¨λμ΄ μλμ§ νμΈν μ μλ€.
remove() : νΉμ μμλ₯Ό EnumSetμμ μ κ±°ν μ μλ€.
EnumSet μ₯μ
: EnumSetμ λͺ¨λ λ©μλλ€μ μ°μ λΉνΈ μ°μ°μ μ¬μ©ν΄μ ꡬνλκΈ° λλ¬Έμ μΌλ°μ μΈ μ°μ°μ΄ λ§€μ° λΉ λ₯ΈνΈμ΄λ€.
EnumSetμ HashSetκ³Ό κ°μ Set ꡬν체μ λΉκ΅νμ λ, λ°μ΄ν°κ° μμ κ°λ₯ν μμλλ‘ μ μ₯λμ΄ μκ³ ,
κ° κ³μ°μ νλλ° νλμ λΉνΈλ§ νμνλ―λ‘ λ λΉ λ₯΄λ€κ³ ν μ μλ€.
λν HashSetμ κ²½μ°μλ λ°μ΄ν°λ₯Ό μ μ₯ν λ²ν·μ μ°ΎκΈ°μν΄ Hashcode κ°μ κ³μ°νλλ° EnumSetμ κ·Έλ° κ³μ° κ³Όμ μ΄ νμ μμ΄ λ§€μ° λΉ λ₯ΈνΈμ΄λ€.
EnumMap
: Map μΈν°νμ΄μ€μμ ν€λ₯Ό νΉμ Enum νμ λ§μ μ¬μ©νλλ‘ νλ ꡬν체μ΄λ€.
EnumMapμ Enum μμλ‘ μ΄λ£¨μ΄μ§ μμμ κΈ°λ°μ λκ³ μλ λ°λ©΄μ HashMap μ Hash Tableμ κΈ°λ°μΌλ‘ ꡬνλμ΄ μλ€.
Enumμ ordinalμ΄λΌλ μμ°¨μ μΈ μ μκ°μ κ°μ§κ³ μκ³ , EnumMapμ λ΄λΆμ λ°μ΄ν°λ₯Ό Arrayμ μ μ₯νλ€.
λ°λΌμ HashMap μ²λΌ ν΄μλ₯Ό λ§λ€κ³ ν΄μ μΆ©λμ λμνλ μμ μμ²΄κ° νμ μμ΄ EnumMapμ΄ HashMapμ λΉν΄ μ±λ₯μ΄ μ’λ€.
EnumMapμ μμ±ν λμλ ν€λ‘ μ°λ enum νμ μ μΈμλ‘ λ겨μ€μΌ νλ€.
EnumMap μ₯μ
: EnumMapμ κ°μ μ°Ύμ λ enum μμκ° index μ 보λ₯Ό ordinal λ©μλλ‘ μ 곡νκ³ μκΈ° λλ¬Έμ λ°λ‘ μ°Ύμ μ μμ§λ§, HashMapμ μ°Ύμ λ key κ°μ hash λ©μλλ‘ indexλ‘ λ³ννκ³ μ°ΎμμΌνλ€.
κ·Έλ¦¬κ³ κ°μ λ£μ λλ EnumMapμ keyμ index μ λ³΄λ‘ κ°μ΄ μ μ₯λ μμΉλ₯Ό μ°Ύμμ λ°λ‘ κ°μ λ£λ λ°λ©΄, HashMapμ key κ°μ hashλ‘ λ§λ€κ³ , λ°°μ΄μ ν¬κΈ°λ₯Ό μ‘°μ νλ λ±μ μΌμ΄ μΆκ°λ‘ νμνλ€.
λ°λΌμ λ°°μ΄μ ν¬κΈ°κ° κ³ μ λμ΄ μκ³ , λ°λ‘ μ°Ύμ μ μλ EnumMap μ΄ μ±λ₯μ λ ν¨μ¨μ μ΄λ€.