본문 바로가기
컴퓨터 과학/디자인패턴

[디자인패턴] 생성 패턴(6) : 싱글톤(Singleton)

by webcodur 2024. 3. 24.
728x90

목차

     

    싱글톤(Singleton)

    싱글톤 디자인 패턴은 클래스의 인스턴스가 프로그램 전체에서 단 하나만 생성되어 사용되도록 하는 디자인 패턴이다. 이 패턴의 주된 목적은 한 클래스에 대한 단일 인스턴스만을 생성하고, 그 인스턴스에 대한 전역 접근점을 제공하는 것이다.

    패턴명인 "싱글톤(Singleton)"은 '하나의 구성 요소' 또는 '단일체'라는 의미의 영어 단어에서 유래했다. 이는 클래스의 인스턴스가 단 하나만 존재해야 한다는 패턴의 특징을 직관적으로 설명해 준다.

     

    싱글톤 패턴 미적용 예시

    싱글톤 패턴을 적용하지 않았을 때의 문제점을 보여주는 C# 코드는 다음과 같다.

    csharpCopy code
    class DatabaseConnector
    {
        public DatabaseConnector()
        {
            // 데이터베이스 연결을 설정한다.
        }
    
        public void Connect()
        {
            // 데이터베이스에 연결하는 로직
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            DatabaseConnector connector1 = new DatabaseConnector();
            DatabaseConnector connector2 = new DatabaseConnector();
    
            // 여기서 connector1과 connector2는 서로 다른 인스턴스다.
        }
    }
    
    

    위 예시에서 DatabaseConnector 클래스의 인스턴스를 필요할 때마다 새로 생성한다. 이렇게 되면 동일한 데이터베이스에 여러 번 연결하는 인스턴스가 생성될 수 있으며, 이는 자원의 낭비를 초래하고, 예상치 못한 오류의 원인이 될 수 있다.

     

     

    싱글톤 패턴 적용 예시

    싱글톤 패턴을 적용한 C# 코드 예시는 다음과 같다.

    csharpCopy code
    public class DatabaseConnector
    {
        private static DatabaseConnector instance;
    
        // 생성자를 private으로 선언하여 외부에서 인스턴스를 직접 생성할 수 없게 한다.
        private DatabaseConnector()
        {
            // 데이터베이스 연결을 설정한다.
        }
    
        // 인스턴스에 접근하기 위한 public static 메소드
        public static DatabaseConnector GetInstance()
        {
            // 인스턴스가 생성되지 않았다면 새로 생성한다.
            if (instance == null)
            {
                instance = new DatabaseConnector();
            }
            return instance;
        }
    
        public void Connect()
        {
            // 데이터베이스에 연결하는 로직
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            DatabaseConnector connector1 = DatabaseConnector.GetInstance();
            DatabaseConnector connector2 = DatabaseConnector.GetInstance();
    
            // 여기서 connector1과 connector2는 동일한 인스턴스다.
        }
    }
    
    

    싱글톤 패턴을 적용하면, DatabaseConnector 클래스의 인스턴스는 프로그램 전체에서 하나만 생성되며, 이 인스턴스에 대한 전역 접근이 가능하다. 이로 인해 자원의 낭비를 방지하고, 데이터베이스 연결과 같은 중요한 작업에서 일관성을 유지할 수 있다.