Singleton
Last updated
Was this helpful?
Last updated
Was this helpful?
μ ν리μΌμ΄μ μ΄ μμλ λ μ΄λ€ ν΄λμ€κ° μ΅μ΄ νλ²λ§ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ (static) κ·Έ λ©λͺ¨λ¦¬μ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ μ¬μ©νλ λμμΈ ν¨ν΄μ΄λ€. μμ±μκ° μ¬λ¬λ² νΈμΆλλλΌλ μ€μ λ‘ μμ±λλ κ°μ²΄λ νλμ΄λ©°, μ΅μ΄ μμ± μ΄ν νΈμΆλ μμ±μλ μ΅μ΄μ μμ±ν κ°μ²΄λ₯Ό λ°ννλ€.
μ¦, μΈμ€ν΄μ€λ₯Ό νλλ§ λ§λ€μ΄ μ¬μ©νκΈ°μν ν¨ν΄μ΄λ€.
νλμ μΈμ€ν΄μ€λ§μ μμ±νλ μ± μμ΄ μμΌλ©°,
getInstance()
λ©μλλ₯Ό ν΅ν΄ λͺ¨λ ν΄λΌμ΄μΈνΈμκ² λμΌν μΈμ€ν΄μ€λ₯Ό λ°ννλ μμ μ μννλ€.
νλμ μΈμ€ν΄μ€λ§μ μ μ§νκΈ° μν΄ μΈμ€ν΄μ€ μμ±μ νΉλ³ν μ μ½μ κ±Έμ΄λ¬μΌ νλ€. new λ₯Ό μ€νν μ μλλ‘ μμ±μμ private μ κ·Ό μ μ΄μλ₯Ό μ§μ νκ³ , μ μΌν λ¨μΌ κ°μ²΄λ₯Ό λ°νν μ μλλ‘ μ μ λ©μλλ₯Ό μ§μν΄μΌ νλ€. λν μ μΌν λ¨μΌ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μ μ°Έμ‘°λ³μκ° νμνλ€.
λ©ν°μ€λ λ© νκ²½μμ μ±κΈν΄ ν¨ν΄μ μ μ©νλ€λ³΄λ©΄ λ¬Έμ κ° λ°μν μ μλ€. λμμ μ κ·Όνλ€κ° νλλ§ μμ±λμ΄μΌ νλ μΈμ€ν΄μ€κ° λ κ° μμ±λ μ μλ κ²μ΄λ€. μ΄λ¬ν λ¬Έμ λ 1. μΈμ€ν΄μ€λ₯Ό λ§λλ λ©μλμ λκΈ°ννλ λ°©λ² (Thread-Safe Initialization) 2. μ μ λ³μμ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ λ°λ‘ μ΄κΈ°ννλ λ°©λ² (Eager Initialization)μΌλ‘ ν΄κ²°ν μ μλ€.
λ¨μν synchronized ν€μλλ₯Ό μ¬μ©νλ©΄ μ±λ₯μ μ΄μκ° μμ μ μλ€.
λ€μκ³Ό κ°μ΄ DCL(Double Checking Locking)
μ μ¨μ getInstance()
μμ λκΈ°ν λλ μμμ μ€μΌ μ μλ€. μ΄κΈ°μ κ°μ²΄λ₯Ό μμ±νμ§ μμΌλ©΄μλ λκΈ°ννλ λΆλΆμ μκ² λ§λ€μλ€. κ·Έλ¬λ μ΄ μ½λλ λ©ν°μ½μ΄ νκ²½μμ λμν λ, νλμ CPU λ₯Ό μ μΈνκ³ λ λ€λ₯Έ CPU κ° lock μ΄ κ±Έλ¦¬κ² λλ€. κ·Έλ κΈ° λλ¬Έμ λ€λ₯Έ λ°©λ²μ΄ νμνλ€.
μ μ λ³μμ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ λ°λ‘ μ΄κΈ°ν νλ λ°©λ²(Eager initialization)μΌλ‘ ν΄κ²°ν μ μλ€.
κ³ μ λ λ©λͺ¨λ¦¬ μμμ μ¬μ©νλ©΄μ λ©λͺ¨λ¦¬ λλΉλ₯Ό λ°©μ§ν μ μλ€.
μ μ μΈμ€ν΄μ€μ΄κΈ° λλ¬Έμ λ€λ₯Έ ν΄λμ€μ μΈμ€ν΄μ€λ€μ΄ λ°μ΄ν°λ₯Ό 곡μ νκΈ° μ½λ€. (Connection Pool, μ€λ λ ν, λλ°μ΄μ€ μ€μ κ°μ²΄μ²λΌ 곡ν΅νΈ κ°μ²΄λ₯Ό μ¬λ¬κ° μμ±ν΄ μ¬μ©ν΄μΌνλ μν©μμ λ§μ΄ μ¬μ©)
λ λ²μ§Έ μ΄μ©μλΆν°λ κ°μ²΄ λ‘λ© μκ°μ΄ μ€μ΄ μ±λ₯μ΄ μ’μμ§λ€.