Item 17. Minimize Mutability
λ³κ²½ κ°λ₯μ±μ μ΅μννλΌ
λΆλ³ μΈμ€ν΄μ€λ‘ μμ±λ μ 보λ κ°μ²΄κ° μλ©Ένλ μκ°κΉμ§ μ λ λ¬λΌμ§μ§ μλλ€. μ΄ νΉμ§μ κ°λ³ ν΄λμ€λ³΄λ€ μ€κ³νκ³ κ΅¬ννκΈ° μ½κ³ , μ€λ₯κ° μκΈΈ μ¬μ§λ μ κ³ , ν¨μ¬ μμ νκ² ν΄μ€λ€.
λΆλ³ ν΄λμ€ μμ±μ 5κ°μ§ κ·μΉ
κ°λ¨ν λ§νλ©΄ μμ μ€λͺ ν κ²κ³Ό κ°μ΄ μμ±λ μμ λΆν° μλ©Έλ λκΉμ§ μ λ λ¬λΌμ§μ§ μλλ‘ νλ©΄ λλ€.
κ°μ²΄μ μνλ₯Ό λ³κ²½νλ λ©μλ(λ³κ²½μ) μ 곡 X
ν΄λμ€ νμ₯ κΈμ§
κ°μ₯ μ¬μ΄ λ°©λ²μ ν΄λμ€λ₯Ό finalλ‘ μ μΈνμ¬ νμ ν΄λμ€ μμ±μ λ§λ κ²μ΄ μ‘΄μ¬
λͺ¨λ μμ±μλ₯Ό private νΉμ package-privateμΌλ‘ μ μΈν λ€, public μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ 곡νλ λ°©λ²λ μ‘΄μ¬(λ μ μ°ν λ°©λ²)
λͺ¨λ νλ final μ μΈ
λͺ¨λ νλ private μ μΈ
μμ μΈ λ΄λΆμ κ°λ³ μ»΄ν¬λνΈμ λν μ κ·Ό μ 곡 X
ν΄λΌμ΄μΈνΈκ° μ 곡ν κ°μ²΄ μ°Έμ‘° λ°ν X
μ κ·Όμ λ©μλκ° κ°λ³ κ°μ²΄ μ°Έμ‘° μ§μ λ°ν X
μμ±μ / μ κ·Όμ / readObject λ©μλμμ κ°λ³ κ°μ²΄ μ°Έμ‘°λ₯Ό λ°©μ΄μ μΌλ‘ 볡μ¬λ₯Ό μνν΄μΌ ν¨
μμ κ·μΉμ μ§ν¨ μμ μ½λλ λ€μκ³Ό κ°λ€.
μ¬κΈ°μ μ¬μΉ μ°μ° λ©μλ(plus
, minus
, times
, dividedBy
)λ λͺ¨λ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ μλ μΈμ€ν΄μ€μ κ°μ λ³κ²½νμ§ μκ³ , μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ°ννλ€.
λλ¬Έμ λ©μλ μ΄λ¦λ add
κ°μ λμ¬κ° μλ plus
κ°μ μ μΉμ¬λ₯Ό μ¬μ©ν κ²λ μ μ μλ€.(BigInteger
, BigDecimal
ν΄λμ€λ ν΄λΉ λͺ
λͺ
κ·μΉμ μ§ν€μ§ μμ νΌλμ μ£Όκ³ μλ€.)
λΆλ³ ν΄λμ€μ μ₯μ
μ€λ λ μμ κ³Ό μΈμ€ν΄μ€ μΊμ±
κ·Όλ³Έμ μΌλ‘ λ³νμ§ μμ μ€λ λ μμ νκΈ° λλ¬Έμ λ°λ‘ λκΈ°νν νμκ° μμ΄ μ¬λ¬ μ€λ λκ° λμμ μ¬μ©ν΄λ μμ νλ€. λΆλ³ κ°μ²΄λ‘ λ§λ€μ΄ λλ κ²μ΄ μ€λ λ μμ μ±μ μ»μ μ μλ κ°μ₯ μ¬μ΄ λ°©λ²μ΄κΈ°λ νλ€.
λΆλ³κ°μ²΄λ λ€λ₯Έ μ€λ λμ μν₯μ μ£Όμ§ μκΈ° λλ¬Έμ μ΄λ¬ν μ₯μ μ μ΄λ € ν λ² λ§λ μΈμ€ν΄μ€λ₯Ό μ€λ³΅ μμ±νμ§ μκ³ μ¬νμ©νλ κ²μ΄ κ°λ₯νλ€. μλ λ κ°μ§ λ°©λ²μΌλ‘ μ 곡ν΄μ€ μ μλλ°, 2λ²μ μ¬μ©νκ² λλ©΄ ν΄λΌμ΄μΈνΈλ₯Ό μμ νμ§ μκ³ νμμ λ°λΌ λΆλ³ κ°μ²΄λ₯Ό μΊμ±νμ¬ μ¬νμ©ν μ μλ μ₯μ μ΄ μκΈ΄λ€.
λ΄λΆ λ°μ΄ν° 곡μ
λΆλ³ κ°μ²΄λΌλ¦¬λ λ΄λΆ λ°μ΄ν°λ₯Ό 곡μ νμ¬ λ³΅μ¬νμ§ μκ³ μ¬μ©ν μ μλ€.
λΆλ³ κ°μ²΄μ΄κΈ° λλ¬Έμ κ°λ³ κ°μ²΄μΈ λ΄λΆ λ°°μ΄μ΄ λ³κ²½λμ§ μλλ€λ κ²μ 보μ₯ν μ μκΈ° λλ¬Έμ κ°λ₯ν λ°©λ²μ΄λ€.
μ€ν¨ μμμ± μ 곡
λ΄λΆ μνλ₯Ό λ°κΎΈμ§ μκΈ° λλ¬Έμ λ©μλμμ μμΈκ° λ°μν νμλ κ·Έ κ°μ²΄λ μ¬μ ν μ ν¨ν μνμ¬μΌ νλ€(μ€ν¨ μμμ±)λ κ·μΉμ μμ°μ€λ½κ² λ°λ₯΄κ² λλ€.
λΆλ³ ν΄λμ€μ λ¨μ
μ₯μ μ΄μ λ¨μ μΈ λΆλΆμΌλ‘, κ°μ μμ£Ό μ‘°κΈ λ³κ²½νκΈ° μν΄μλ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±ν΄μΌ νλ€λ μ μ΄λ€. μ΄ λ¬Έμ λ₯Ό λμ²νκΈ° μν΄, κ°λ³ λλ° ν΄λμ€λ₯Ό λ§λ€μ΄ λΆλ³ ν΄λμ€μ λ¨μ μ΄ μ‘΄μ¬νλ μ°μ°λ§λ€ κ°μ²΄λ₯Ό μμ±νμ§ μλ κ°λ³ λλ° ν΄λμ€λ‘ ν΄κ²°ν μ μλ€.
ν΄λΌμ΄μΈνΈκ° μ¬μ©ν μ°μ°μ μμΈ‘ κ°λ₯ν κ²½μ°: package-privateμ κ°λ³ λλ° ν΄λμ€λ₯Ό λμ΄ μ°μ°μ μν(
BigInteger
)ν΄λΌμ΄μΈνΈκ° μ¬μ©ν μ°μ°μ μμΈ‘ν μ μλ κ²½μ°:
StringBuilder
μ κ°μ λ³λμ κ°λ³ λλ° ν΄λμ€λ₯Ό μ 곡
Last updated
Was this helpful?