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

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

by SpiralMoon 2019. 2. 13.
반응형

싱글톤 패턴 (Singleton pattern)

생성 패턴중 하나인 싱글톤 패턴에 대해 알아보자.

시리즈

2019.02.14 - [Programming/프로그래밍 이론] - [디자인 패턴] 추상 팩토리 패턴 (Abstract factory pattern)

2019.03.09 - [Programming/프로그래밍 이론] - [디자인 패턴] 빌더 패턴 (Builder pattern)

2019.03.12 - [Programming/프로그래밍 이론] - [디자인 패턴] 복합체 패턴 (Composite pattern)

2019.03.20 - [Programming/프로그래밍 이론] - [디자인 패턴] 팩토리 메소드 패턴 (Factory method pattern)


싱글톤 패턴이란?

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

 

시스템상 단 하나의 인스턴스만 필요한 경우에 사용할 수 있다. (단순한 DB 커넥션 등)


예시

// C#

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

    // 싱글톤으로 정의할 클래스
    public class Example
    {
        private static Example _instance;

        // 생성자는 클래스 외부에서 호출할 수 없도록 private으로 정의되어야 함
        private Example()
        {
            ...
        }

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

            return _instance;
        }
    }
}

 

 

싱글톤 클래스의 조건은 다음과 같다.

 

  • 클래스 내부에 할당될 _instance는 전역으로 선언되어야 한다.
    • 이 인스턴스는 최초 할당 후 변경되지 않는다.
  • 인스턴스는 오로지 GetInstance()를 통해서만 제공되어야 한다.
    • GetInstance() 함수는 전역으로 선언되어야 한다. 
    • 싱글톤 클래스 외부에서 생성자를 호출할 수 없도록 해야한다. (위 Example 클래스의 생성자를 보면 public이 아닌 private으로 선언되었음을 알 수 있다.)

장점

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

단점

  • Rase condition 발생 가능 : 싱글톤 인스턴스에 여러 스레드에서 동시에 접근하여 특정 작업을 수행하는 경우 Race condition이 발생할 수 있다. 관련 문제가 염려되는 코드에는 동시 접근에 대한 lock 구현이 필요할 수 있다.
반응형

댓글