ITEM 6: Avoid Unnecessary Object
λκ°μ κΈ°λ₯μ κ°μ²΄λ₯Ό λ§€λ² μμ±νλ κ²λ³΄λ€ κ°μ²΄ νλλ₯Ό μμ±νμ¬ μ¬μ¬μ©νλ νΈμ΄ μ’μ λκ° λ§λ€. νΉν λΆλ³ κ°μ²΄(item 17)λ μΈμ λ μ§ μ¬μ¬μ©ν μ μλ€.
μμ λ¬Έμ₯μ μ€νλ λλ§λ€ String μΈμ€ν΄μ€λ₯Ό μλ‘ λ§λ€λ©°, μ΄ λ¬Έμ₯μ΄ λ°λ³΅λ¬Έμ΄λ λΉλ²ν νΈμΆλλ λ©μλ μμ μλ€λ©΄, String μΈμ€ν΄μ€κ° μμμ΄ λ§μ΄ λ§λ€μ΄ μ§ μ μλ€.
μμ κ²½μ° μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ§€λ² λ§λλ λμ νλμ μΈμ€ν΄μ€λ₯Ό μ¬μ©νλ©°, κ°μ κ°μ λ¨Έμ μμμ λκ°μ λ¬Έμμ΄ λ¦΄ν°λ΄μ μ¬μ©νλ κ²½μ° λͺ¨λ μ½λκ° κ°μ κ°μ²΄λ₯Ό μ¬μ¬μ©ν¨μ΄ 보μ₯λλ€.
μ μ ν©ν°λ¦¬ λ©μλ-item1λ₯Ό μ 곡νλ λΆλ³ ν΄λμ€μμλ λΆνμν κ°μ²΄ μμ±μ νΌν μ μλ€.
μμ±μλ λ§€λ² μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νμ§λ§, ν©ν°λ¦¬ λ©μλλ κ·Έλ μ§ μμΌλ―λ‘, Boolean(String)
μμ±μ λμ Boolean.valuesOf(String)
ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
μ κ· ννμμ νμ©ν΄ μ ν¨ν λ‘λ§ μ«μμΈμ§ νμΈνλ λ©μλμ΄λ€. νμ§λ§ μ΄ λ°©μμ String.matches
λ©μλλ₯Ό μ¬μ©νλ€λ λ¬Έμ μ μ΄ μλ€.
String.matches
λ©μλ λ΄λΆμμ λ§λλ μ κ·ννμμ© Pattern
μΈμ€ν΄μ€λ ν λ² μ°κ³ λ²λ €μ Έ 곧 λ°λ‘ κ°λΉμ§ 컬λ μ
λμμ΄ λλ€. Pattern
μ μ
λ ₯λ°μ μ κ·ννμμ ν΄λΉνλ μ ν μν λ¨Έμ (finite state machine)μ λ§λ€μ΄ μΈμ€ν΄μ€ μμ± λΉμ©μ΄ λλ€.
finite state machine μ΄λ
μνλ₯Ό κΈ°λ°μΌλ‘ λμνλ κ°λ μ λ°©μμΌλ‘, μνλ₯Ό κΈ°λ°μΌλ‘ μ²λ¦¬λκΈ° λλ¬Έμ ν λ²μ ν κ°μ μνλ§ μ²λ¦¬λλ€. μνμ κΈ°λ°ν 쑰건μ μν΄ μ²λ¦¬λλ―λ‘, μν κ°μ΄ λ³κ²½λλ©΄ μνμ λν μ’ λ£ λ° λ€λ₯Έ μνλ‘μ λ³νμ μ²λ¦¬νλ€.
μ΄λ κ² μμ± λΉμ©μ΄ λ§μ΄ λλ κ°μ²΄κ° λ°λ³΅ν΄μ νμνλ€λ©΄, μΊμ±νμ¬ μ¬μ¬μ©νλ κ²μ κΆμ₯νλ€.
λΆλ³μΈ Pattern μΈμ€ν΄μ€λ₯Ό ν΄λμ€ μ΄κΈ°ν κ³Όμ μμ μ§μ μμ±ν΄ μΊμ±ν΄λκ³ , λμ€μ isRomanNumeral
λ©μλ νΈμΆμ ν΅ν΄ μ΄ μΈμ€ν΄μ€λ₯Ό μ¬μ¬μ©νμ¬ μ±λ₯μ κ°μ ν μ μλ€.
νμ§λ§, ν΄λμ€κ° μ΄κΈ°νλ ν μ΄ λ©μλλ₯Ό ν λ²λ νΈμΆνμ§ μλλ€λ©΄, ROMAN
νλλ νμμμ΄ μ΄κΈ°ν λ κ²μ΄λ€. lazy initialization(item 83) μΌλ‘ isRomanNumeral
λ©μλκ° μ²μμΌλ‘ νΈμΆλ λ νλλ₯Ό μ΄κΈ°ννλλ‘ νμ¬ λΆνμν μ΄κΈ°νλ₯Ό μμ¨ μ μμ§λ§, μ§μ° μ΄κΈ°νλ μ½λλ₯Ό 볡μ‘νκ² λ§λλλ°, μ±λ₯μ ν¬κ² κ°μ λμ§ μμ λκ° λ§μΌλ―λ‘ κΆνμ§ μλλ€.(item 67)
Map
μΈν°νμ΄μ€μ KeySet
λ©μλλ Map
κ°μ²΄ μμ λͺ¨λ ν€ κ°μ λ΄μ Set
λ·°λ₯Ό λ°ννλ€. KeySet
νΈμΆμ μλ‘μ΄ Set
μΈμ€ν΄μ€κ° λ§λ€μ΄μ§λ€κ³ μκ°ν μ μμ§λ§, μ¬μ€μ λ§€λ² λμΌν Set
μΈμ€ν΄μ€λ₯Ό λ°νν μλ μλ€. λ°νλ Set
μΈμ€ν΄μ€κ° μΌλ°μ μΌλ‘ κ°λ³μ΄λλΌλ λ°νλ μΈμ€ν΄μ€λ€μ κΈ°λ₯μ μΌλ‘ λͺ¨λ λμΌνλ©°, λ°νλ κ°μ²΄ μ€ νλλ₯Ό μμ νλ©΄ λͺ¨λ κ°μ²΄κ° λμΌν Map
μ λλ³νκΈ° λλ¬Έμ λͺ¨λ κ°μ²΄κ° λ°λΌμ λ°λλ€. KeySet
λ·° κ°μ²΄λ₯Ό μ¬λ¬ κ° μμ±ν΄λ λμ§λ§, κ·Έλ΄ νμλ μλ€.
λ λ€λ₯Έ μλ‘ auto boxingμ λ€ μ μλ€. auto boxingμ κΈ°λ³Έ νμ κ³Ό λ°μ±λ κΈ°λ³Έ νμ μ μμ΄ μΈ λ μλμΌλ‘ μνΈ λ³νν΄μ£Όλ κΈ°μ μ΄λ€. μ€ν΅ λ°μ±μ κΈ°λ³Έ νμ κ³Ό κ·Έμ λμνλ λ°μ±λ κΈ°λ³Έ νμ μ ꡬλΆμ νλ €μ£Όμ§λ§, μμ ν μμ μ£Όλ κ²μ μλλ€.
μ μ½λλ λͺ¨λ μ μμ μ΄ ν©μ ꡬνλ λ©μλλ‘, intλ₯Ό μ¬μ©νμ§ μκ³ longμ μ¬μ©νκ³ μλ€. μ νν λ΅μ λΌ μλ μμ§λ§, μ λλ‘ κ΅¬ννμμ λλ³΄λ€ μ±λ₯μμΌλ‘ ν¨μ¬ λλ €μ§λ€. sum λ³μλ₯Ό long
μ΄ μλ Long
μΌλ‘ μ μΈνμ¬ λΆνμν μΈμ€ν΄μ€κ° sum += i
μ°μ°μ΄ μ΄λ£¨μ΄μ§ λλ§λ€ μμ±λλ κ²μ΄λ€. λ¨μν sumμ νμ
μ long
μΌλ‘λ§ λ³κ²½ν΄μ£Όμ΄λ μ±λ₯μ΄ κ°μ λλ€. μ¦, λ°μ±λ κΈ°λ³Έ νμ
보λ€λ κΈ°λ³Έ νμ
μ μ¬μ©νκ³ , μλμΉ μμ μ€ν λ°μ±μ΄ μ¨μ΄λ€μ§ μλλ‘ μ£Όμν΄μΌ νλ€.
μ€μ λ‘ μνμ κ°κ²©μ κ³μ°ν λ μλμΉ μμ auto boxingμ΄ νν λ°μνλ€. κ°κ²© νλμ λν νμ
μΌλ‘ BigDecimal
μ μ£Όλ‘ μ¬μ©νλλ° BigDecimal
λ΄λΆ λ©μλλ κΈ°λ³Ένμ
μ μ¬μ©νκ³ μλ€.
μ΄λ BigDecimal.longValue()
λ‘ μ°μ°μ νκ³ μΆλ€λ©΄, κΈ°λ³Έ νμ
μ μ¬μ©ν΄μΌνλ©°, κ·Έλ μ§ μλ€λ©΄ λΆνμν μΈμ€ν΄μ€κ° μμ±λ κ²μ΄λ€.
νλ‘κ·Έλ¨μ λͺ νμ±, κ°κ²°μ±, κΈ°λ₯μ μν΄ κ°μ²΄λ₯Ό μΆκ°λ‘ μμ±νλ κ²μ΄λΌλ©΄ μΌλ°μ μΌλ‘ μ’μ μΌμ΄λ€. λΆνμν κ°μ²΄λ₯Ό μμ±νλ κ²μ νΌνκ³ μ κ°μ²΄ ν(pool)μ μμ±νλ κ²μ κΆμ₯νμ§ μλλ€. μ체 κ°μ²΄ νμ μ½λλ₯Ό ν·κ°λ¦¬κ² λ§λ€λ©°, λ©λͺ¨λ¦¬ μ¬μ©λμ λλ¦¬κ³ μ±λ₯μ λ¨μ΄λ¨λ¦°λ€. JVMμ κ°λΉμ§ 컬λ ν°λ μλΉν μ΅μ νκ° μλμ΄μμ΄ μ§μ λ§λ κ°μ²΄ νλ³΄λ€ ν¨μ¬ λΉ λ₯Έ κ²½μ°κ° λ§λ€. λ°©μ΄μ 볡μ¬κ° νμν μν©μμ κ°μ²΄λ₯Ό μ¬μ¬μ©νμ λμ νΌν΄κ° νμ μλ κ°μ²΄λ₯Ό λ°λ³΅ μμ±νμ λμ νΌν΄λ³΄λ€ ν¨μ¬ ν° κ²μ μ μν΄μΌνλ€.
Last updated
Was this helpful?