STUDY π/CS
[λμμΈ ν¨ν΄] μ±κΈν€ ν¨ν΄(singleton pattern)
daxx0ne
2023. 3. 21. 18:10
π‘ λμμΈ ν¨ν΄μ΄λ?: νλ‘κ·Έλ¨ μ€κ³ν λ λ°μνλ λ¬Έμ μ λ€μ κ°μ²΄ κ°μ μνΈ κ΄κ³ λ±μ μ΄μ©νμ¬ ν΄κ²°ν μ μλλ‘ νλμ κ·μ½ ννλ‘ λ§λ€μ΄ λμ κ²μ μλ―Ένλ€!
μ±κΈν€ ν¨ν΄
: νλμ ν΄λμ€μ μ€μ§ νλμ μΈμ€ν΄μ€λ§ κ°μ§λ ν¨ν΄μ΄λ€.
- νλμ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ μ¬λ¬ κ°μ κ°λ³μ μΈ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μμ§λ§, κ·Έλ κ² νμ§ μκ³ νλμ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ λ¨ νλμ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ μ΄λ₯Ό κΈ°λ°μΌλ‘ λ‘μ§μ λ§λλ λ° μ°μ΄λ©°, λ³΄ν΅ λ°μ΄ν°λ² μ΄μ€ μ°κ²° λͺ¨λμ λ§μ΄ μ¬μ©λλ€!
μ₯μ
- νλμ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ λκ³ ν΄λΉ μΈμ€ν΄μ€λ₯Ό λ€λ₯Έ λͺ¨λλ€μ΄ 곡μ νλ©° μ¬μ©νκΈ° λλ¬Έμ μμ±ν λ λΉμ©μ΄ μ κ² μ¦
λ¨μ
- λͺ¨λ κ° κ²°ν©μ κ°νκ² λ§λ€κΈ° λλ¬Έμ μμ‘΄μ±(μ’ μμ±)μ΄ λμμ§
- TDDλ₯Ό ν λ κ±Έλ¦Όλμ΄ λ¨
- λ¨μ ν μ€νΈλ ν μ€νΈκ° μλ‘ λ 립μ μ΄μ΄μΌ νλ©° μ΄λ€ μμλ‘λ ν μ€νΈλ₯Ό μ€νν μ μμ΄μΌ νμ§λ§,
- μ±κΈν€ ν¨ν΄μ 미리 μμ±λ νλμ μΈμ€ν΄μ€λ₯Ό κΈ°λ°μΌλ‘ ꡬννλ ν¨ν΄μ΄λ―λ‘ κ° ν μ€νΈλ§λ€ λ 립μ μΈ μΈμ€ν΄μ€λ₯Ό λ§λ€κΈ°κ° μ΄λ €μ
μμ μ½λ
class Singleton {
private static class singleInstanceHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return singleInstanceHolder.INSTANCE;
}
}
public class HelloWorld{
public static void main(String []args){
Singleton a = Singleton.getInstance();
Singleton b = Singleton.getInstance();
System.out.println(a.hashCode());
System.out.println(b.hashCode());
if (a == b){
System.out.println(true);
}
}
}
μ€μ²© ν΄λμ€λ₯Ό μ΄μ©ν΄μ λ§λλ λ°©λ²μ΄ κ°μ₯ λμ€μ μ
- singleInstanceHolder ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ κ°μ²΄λ₯Ό μ μΈνκΈ° λλ¬Έμ ν λ²λ§ λ‘λλ¨
- μ±κΈν€ ν΄λμ€μ μΈμ€ν΄μ€λ μ ν리μΌμ΄μ λΉ νλλ§ μ‘΄μ¬
- ν΄λμ€κ° λλ² λ‘λλμ§ μκΈ° λλ¬Έμ λ μ€λ λκ° λμΌν JVMμμ 2κ°μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμ
- μ±κΈν€ ν΄λμ€κ° λ‘λλ λ ν΄λμ€κ° λ©λͺ¨λ¦¬μ λ‘λλμ§ μκ³ μ΄λ ν λͺ¨λμμ getInstance() λ©μλκ° νΈμΆν λ μ±κΈν€ κ°μ²΄λ₯Ό μ΅μ΄ μμ± λ° λ¦¬ν΄νκ² λ¨
μμ‘΄μ± μ£Όμ
- μμ λ¨μ κ³Ό κ°μ΄ μ±κΈν€ ν¨ν΄μ κ²°ν©λκ° λλ€λ λ¨μ μ ν΄κ²°νκΈ° μν΄ μμ‘΄μ± μ£Όμ μ ν΅ν΄ λͺ¨λ κ°μ κ²°ν©μ μ‘°κΈ λ λμ¨νκ² λ§λ€ μ μμ
- λ©μΈ λͺ¨λμ΄ μ§μ λ€λ₯Έ νμ λͺ¨λμ λν μμ‘΄μ±μ 주기보λ€λ
- μ€κ°μ μμ‘΄μ± μ£Όμ μκ° μ΄ λΆλΆμ κ°λ‘μ± λ©μΈ λͺ¨λμ΄ κ°μ μ μΌλ‘ μμ‘΄μ±μ μ£Όμ νλ λ°©μ
μ₯μ
- λͺ¨λλ€μ μ½κ² κ΅μ²΄ν μ μλ κ΅¬μ‘°κ° λμ΄ ν μ€ν νκΈ° μ½κ³ λ§μ΄κ·Έλ μ΄μ νκΈ°λ μμν΄μ§
- ꡬνν λ μΆμν λ μ΄μ΄λ₯Ό λ£κ³ μ΄λ₯Ό κΈ°λ°μΌλ‘ ꡬν체λ₯Ό λ£μ΄ μ£ΌκΈ° λλ¬Έμ μ ν리μΌμ΄μ μμ‘΄μ± λ°©ν₯μ΄ μΌκ΄λ¨
- μ ν리μΌμ΄μ μ μ½κ² μΆλ‘ ν μ μμ
- λͺ¨λ κ°μ κ΄κ³λ€μ΄ μ‘°κΈ λ λͺ νν΄μ§
λ¨μ
- λͺ¨λλ€μ΄ λμ± λ λΆλ¦¬λλ―λ‘ ν΄λμ€ μκ° λμ΄λ 볡μ‘μ±μ΄ μ¦κ°λ μ μμ
- μ½κ°μ λ°νμ ν¨λν°κ° μκΈ°κΈ°λν¨
μμ‘΄μ± μ£Όμ μμΉ
“μμ λͺ¨λμ νμ λͺ¨λμμ μ΄λ ν κ²λ κ°μ Έμ€μ§ μμμΌ νκ³ λ λ€ μΆμνμ μμ‘΄ν΄μΌ νλ©°, μΆμνλ μΈλΆ μ¬νμ μμ‘΄νμ§ λ§μμΌ νλ€”