본문 바로가기
Programming/프로그래밍 이론

[디자인 패턴] 싱글톤 패턴 (Singleton pattern)

by SpiralMoon 2019. 2. 13.
반응형

 주제 : 싱글톤 패턴 (Singleton pattern).


생성 패턴의 하나.


싱글톤 패턴이란, 객체지향 언어에서 프로그램 시작 후에 어떤 클래스가 단 한 번만 인스턴스를 생성하여 메모리에 할당하고, 이후에 이 클래스의 인스턴스가 필요하면 미리 만들어진 인스턴스를 전역 공간에서 불러와서 사용하는 패턴이다.


▶  예시


아래 예시는 C#을 기반으로 작성하였다.

class Program
{
    static void Main(string[] args)
    {
        var singletonInstance = Example.GetInstance();
    }

    public class Example
    {
        private static Example _instance;

        private Example() { }

        // 인스턴스화 하거나 이미 생성된 인스턴스를 불러오는 함수.
        public static Example GetInstance()
        {
            // 인스턴스가 없으면 새로 만든다.
            if (_instance == null)
            {
                _instance = new Example();
            }

            return _instance;
        }
    }
}

핵심은 다음과 같다.

첫 번째, _instance가 전역(static)으로 선언되어야 한다.

두 번째, GetInstance 함수도 전역으로 선언되어야 한다.

마지막으로 싱글톤 클래스 외부에서 생성자를 호출할 수 없도록 만드는 것이다. (위 Example 클래스의 생성자를 보면 public이 아닌 private으로 선언되었음을 알 수 있다.)



▶  장점

▷ 시스템상에 단 하나의 인스턴스만 필요한 경우 : 

DB 커넥션 등 시스템에 단 하나의 인스턴스만 필요하거나, 둘 이상의 인스턴스는 필요가 없는 경우에 사용할 수 있다.

▷ 적은 메모리 : 

하나의 인스턴스만 생성하기 때문에 메모리를 아낄 수 있다.

▷ static 구문의 제약조건을 받지 않음 : 

싱글톤 패턴으로 구현하면 클래스를 static으로 선언 했을 때 언어로부터 받는 제약조건을 무시할 수 있다.

public static class Example { ... }

위 같은 경우인데 클래스를 인스턴스화 시킬 수 없게되고 생성자도 만들지 못한다.


▶  단점

▷ Rase condition 발생 가능 : 

여러 쓰레드에서 동시에 접근할 경우 Race condition이 발생할 수 있기 때문에 GetInstance 함수 내부에 동시 접근에 대한 구현이 필요하다.


반응형

댓글