Skip to content

Latest commit

Β 

History

History
63 lines (52 loc) Β· 2.12 KB

Singleton.md

File metadata and controls

63 lines (52 loc) Β· 2.12 KB

Singleton

전체 μ‹œμŠ€ν…œμ—μ„œ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ§€λŠ” 것을 보μž₯ν•˜λŠ” 객체 μƒμ„±νŒ¨ν„΄μ΄λ‹€.

πŸ‘‰ λ”°λΌμ„œ 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이 ν¬ν•¨λœ 객체λ₯Ό μœ μΌν•˜κ²Œ μƒμ„±ν•˜κ²Œ λ©λ‹ˆλ‹€.