Singleton Pattern

First

개발 ν•˜λ©΄μ„œ ν•œλ²ˆμ―€μ€ λ“€μ–΄λ³Έ μ‹±κΈ€ν„΄ νŒ¨ν„΄. ν•œλ²ˆμ―€μ€ 정리할 ν•„μš”κ°€ μžˆμ„λ“―ν•΄μ„œ 기둝을 λ‚¨κ²¨μš”. 싱글턴은 짧게 λ§ν•˜λ©΄ "ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ μ‚¬μš©μžμ—κ²Œ 단 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œμ„ μƒμ„±ν•΄μ„œ μ‚¬μš©ν•˜λ„λ‘ κ°•μ œν•œ 것" μ΄μ—μš”.

개발자 μ€‘μ—λŠ” 싱글턴을 μ’‹μ•„ν•˜λŠ” μ‚¬λžŒλ„ 있고, μ‹«μ–΄ ν•˜λŠ” μ‚¬λžŒλ„ μžˆμ–΄μš”. 그런데 μ€‘μš”ν•œ 것은 이게 μ™œ ν•„μš”ν•˜κ³ , μ–΄λ–¨ λ•Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€, 또 μ‚¬μš©ν•˜μ§€ μ•Šμ•„μ•Ό ν•  상황은 μ–΄λ–€ λ•ŒμΈμ§€λ₯Ό μ•„λŠ” 것이라고 μƒκ°ν•΄μš”. "static은 λ˜λ„λ‘μ΄λ©΄ μ‚¬μš©ν•˜μ§€ 말라" λΌλŠ” 말도 μžˆλŠ”λ°, 이것 λ˜ν•œ 상황에 λ”°λ₯΄λ‹€κ³  μƒκ°ν•˜κ΅¬μš”!

Not thread-safe version

public class SingleManager
{
    private static SingleManager instance = null;
    private SingleManager()
    {
        //TODO:
    }
    
    public static SingleManager Instance
    {
        get
        {
            if(instance == null)
                instance = new SingleManager();
            return instance;
        }
    }
}

Traditional Thread-safe version

public class SingleManager
{
    private static SingleManager instance = null;//default(SingleManager);
    private static readonly object lockObj = new object();
    
    private SingleManager()
    {
        //TODO:
    };
    
    public static SingleManager Instance
    {
        get
        {
            lock(lockObj)
            {
                if(instance == null)
                    instance = new SingleManager();
                return instance;
            }
        }
    }
}

Lazy Thread-safe version

Last updated