μ 체 μμ€ν
μμ νλμ μΈμ€ν΄μ€λ₯Ό κ°μ§λ κ²μ 보μ₯νλ κ°μ²΄ μμ±ν¨ν΄μ΄λ€.
π λ°λΌμ jsμμ κ°μ²΄ 리ν°λ΄λ μ±κΈν€ ν¨ν΄μ΄λ€.
var singletonObj = { a : 'κ°', b : function () { } }
μ΄λ κ² λ§λ€μ΄μ§λ μ±κΈν€μ λΉκ³΅κ° μν, ν¨μλ₯Ό μ μν μ μλ€.
νν μ°λ¦¬κ° μ¬μ©νλ λΌμ΄λΈλ¦¬μλ μΈλΆμμ μ½κ² μ κ·Όν μ μλ λΉκ³΅κ° λ©€λ²λ₯Ό κ°μ§κ³ μλ€. μ΄λ΄λ μ°λ¦¬λ μλ°μ€ν¬λ¦½νΈμμ ν΄λ‘μ Έλ₯Ό μ¬μ©νμ¬ λΉκ³΅κ° λ©€λ²λ₯Ό ꡬννλ€.
var Singleton = (function () {
// μ±κΈν€ ν¨ν΄ ꡬν μ½λ
// λΉκ³΅κ° λ³μ, λ©μλ μ μ
var instantiaed;
function init() {
// μ±κΈν€ κ°μ²΄ μ μ
return {
// κ³΅κ° λ©μλ μ μ
publicMethod : function () {
return 'hello Singleton Pattern!!!';
},
// κ³΅κ° νλ‘νΌν° μ μ
publicProp : 'single value'
}
}
// κ³΅κ° λ©μλμΈ getInstance() λ₯Ό μ μν κ°μ²΄.
// λ μ컬 νΉμ±μΌλ‘ μΈν΄ λΉκ³΅κ° λ³μ, λ©μλμ μ κ·Ό κ°λ₯(ν΄λ‘μ )
return {
getInstance : function () {
if (!instantiaed) {
instantiaed = init();
}
return instantiaed;
}
}
})();
// μ±κΈν€ κ°μ²΄ μμ±νμ¬ publicMethod νΈμΆ κ°λ₯ν΄μ§
var first = Singleton.getInstance();
first.publicMethod();
console.log(first.publicMethod());
// hello Singleton Pattern!!!
var second = Singleton.getInstance();
second.publicMethod();
console.log(second.publicMethod());
// hello Singleton Pattern!!!
console.log(first === second); // true
μ μ½λμμλ λ³μμ λ μ컬ν νΉμ±μΌλ‘ μΈν΄ λ΄λΆμ getInstance
ν¨μμμ λΉκ³΅κ° λ³μμΈ instantiaed
μ μ κ·Όν μ μλ€λ κ²κ³Ό getInstane()
νΈμΆμ΄ λλλλΌλ instantiaed
κ°μ κ³μ μ μ§λλ νΉμ±(ν΄λ‘μ )μ μ΄μ©ν΄ publicMethod()
, publicProp
μ΄ ν¬ν¨λ κ°μ²΄λ₯Ό μ μΌνκ² μμ±νκ² λ©λλ€.