CodeLabs

싱글톤(Singleton) 패턴 본문

C#/디자인패턴

싱글톤(Singleton) 패턴

무오_ 2023. 8. 28. 22:13

싱글톤 패턴

정의는 단순하다.

싱글톤 인스턴스를 오직 하나만 생성해서 사용한다.

사용법과 문제점을 알아보자.

 

public class Singleton
{
    private static Singleton instance;
    private Singleton() { }

    public static Singleton GetInstance()
    {
        if(instance == null)
            instance = new Singleton();
        return instance;
    }
    
    public void print()
    {
        Console.WriteLine("싱글톤 호출");
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Singleton.GetInstance().print();
    }
}

 

유의사항

오직 하나의 인스턴스만을 생성해서 사용한다는 메모리 측면의 장점과 더불어 전역으로 설정되어 다른 클래스에서의 접근성이 높지만 여러곳에서 해당 인스턴스에 접근할 경우 동시성의 오류가 발생할 수 있음에 유의해야한다.

 

문제점

싱글톤 인스턴스의 경우 자원이 공유되어 있기 때문에 테스트를 하기 위해서는 매번 해당 인스턴스를 초기화 해주어야 하는 번거로움이 있다.

 

두 번째로는 앞서 말한 멀티스레딩 환경에서의 동시성 문제가 발생할 수 있다. 여러 스레드에서 해당 인스턴스에 접근할 경우 충돌이 발생하거나 예기치못한 오류가 발생할수 있다.

 

세 번째로는 싱글톤 인스턴스에 크게 의존하는 코드의 경우 싱글톤을 변경하거나 교체할 경우 광범위한 오류를 발생시킬 수 있다. 이는 코드의 유연성을 저하시키고 SOLID 원칙의 OCP와 DIP를 위배하게 된다.

 

네 번째로는 A 싱글톤이 B 싱글톤에 의존하는 경우 B 싱글톤이 A 싱글톤에 종속되는 순환 종속성에 빠질 수 있기 때문에 주의깊게 관리해야 한다.

 

다섯 번째로는 싱글톤은 전역이기 때문에 프로그램이 시작될 때 생성되서 끝날 때 사라진다. 필요없는 경우에도 메모리에 남아서 자원을 사용하기 때문에 싱글톤이 다수 생성될 경우 메모리측면에서 낭비될 수 있다.

 

결론

싱글톤을 구현하기에 따라서 SRP를 위배하는 경우도 생기기 때문에 위에 나오는 유의사항과 문제점을 잘 파악해서 사용해야한다.