Item 83. Lazy Initialization
μ§μ° μ΄κΈ°νλ μ μ€ν μ¬μ©νλΌ
μΌλ°μ μΌλ‘ νλλ₯Ό μ΄κΈ°ν ν λ μλμ κ°μ΄ μ΄κΈ°νλ₯Ό νλ€.
νμ§λ§ μ΄κΈ°ν μμ μ μ²μμ νλ κ²μ΄ μλλΌ νμν μμ μ νλ μ§μ° μ΄κΈ°ν κΈ°λ²μ μ¬μ©ν μ μλ€. λ€λ₯Έ μ΅μ νμ λ§μ°¬κ°μ§λ‘ μ§μ° μ΄κΈ°νλ λͺ¨λ μν©μμ μ±λ₯μ ν₯μμν€μ§ μμΌλ©°, μ€νλ € μ±λ₯μ μ νμν¬ μλ μλ€. μ§μ° μ΄κΈ°νλ λ³΄ν΅ μλμ κ°μ κ²½μ°μ μ¬μ©νλ€.
νλμ μ΄κΈ°ν λΉμ©μ΄ λμ κ²½μ° μ΅μ ν λͺ©μ μΌλ‘ μ¬μ©
μν λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ νλ κ²½μ°
μ΄κΈ°ν μνμ±(Initialization circularity) ν΄κ²° λ°©λ²
μ΄κΈ°ν μνμ± λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ§μ° μ΄κΈ°νλ₯Ό μ¬μ©νλ κ²½μ°, μλμ κ°μ΄ synchornized
ν€μλλ₯Ό μ¬μ©νλ©΄ κ°λ¨νκ² ν΄κ²°ν μ μλ€.
μ±λ₯ λ¬Έμ λ‘ μΈν μ§μ° μ΄κΈ°ν(μ μ νλ)
λ§μ½ μ±λ₯ λ¬Έμ λ‘ μ μ νλλ₯Ό μ§μ° μ΄κΈ°νν΄μΌνλ κ²½μ°μ μ§μ° μ΄κΈ°ν νλ ν΄λμ€ κ΄μ©κ΅¬λ₯Ό μ¬μ©ν μ μλ€. ν΄λμ€λ ν΄λμ€κ° μ²μ μ°μΌ λ μ΄κΈ°νλλ νΉμ±μ μ΄μ©νμ¬ νλλ₯Ό μ§μ° μ΄κΈ°ννλ λ°©λ²μ΄λ€.
getField
λ©μλκ° μ²μ νΈμΆλ λ FieldHolder
ν΄λμ€κ° μ΄κΈ°νλλ©°, λ΄λΆμ field
νλκ° μ΄κΈ°νλλ€.
μ΄ λ°©μμ λκΈ°ν μμ΄λ μ§μ° μ΄κΈ°νλ₯Ό μνν μ μμ΄, μ±λ₯μ΄ μ νλ μμΈμ΄ μ ν μλ€λ μ₯μ μ΄ μλ€.
μ±λ₯ λ¬Έμ λ‘ μΈν μ§μ° μ΄κΈ°ν(μΈμ€ν΄μ€ νλ)
μΈμ€ν΄μ€ νλμ κ²½μ°μ μ΄μ€κ²μ¬ κ΄μ©κ΅¬λ₯Ό μ¬μ©ν΄ μ§μ° μ΄κΈ°νλ₯Ό μνν μ μλ€. μ΄ λ°©μμ ν λ² μ΄κΈ°νλ νλμ μ κ·Όν λ λκΈ°ν λΉμ©μ μμ μ£Όλ λ°©μμ΄λ€.
volatile
ν€μλλ₯Ό μ¬μ©νμ¬ νλλ₯Ό μ μΈνμ¬, νλμ λν λͺ¨λ μ½κΈ°/μ°κΈ°κ° λ©μΈ λ©λͺ¨λ¦¬μμ μνλκΈ° λλ¬Έμ μ΄μ€κ²μ¬ κ΄μ©κ΅¬λ₯Ό μ¬μ©ν μ μκ² λλ€.
μ΄ λ°©μμ μ μ νλμλ μ¬μ©ν μ μμ§λ§, κ΅³μ΄ κ·Έλ΄ νμ μμ΄ μ μ νλμ κ²½μ°μ μ§μ° μ΄κΈ°ν νλ ν΄λμ€ κ΄μ©κ΅¬λ₯Ό μ¬μ©νλ κ²μ΄ λ μ’λ€.
Last updated
Was this helpful?