본문 바로가기
프로그래밍 공통

싱글턴 디자인 패턴

by Fathory 2020. 11. 10.

싱글턴 패턴이란 ? 

 

전역변수를 사용하지 않도록 객체 하나만을 생성하도록 하며, 생성된 객체는 어디서든 참조할 수 있도록 하는 디자인패턴

 

싱글톤 패턴은 다음과 같은 상황에 적용할 수 있다.

  • 프로그램 내 에서 어떤 객체가 단 1개만 존재해야 한다.
  • 프로그램 내부의 여러 부분에서 이 객체를 공유하며 사용한다.

위와 같은 상황에서, 싱글톤 패턴은 객체가 프로그램 내부에서 단 1개만 생성됨 을 보장한다.

멀티 스레드에서 이 객체를 공유하며 동시에 접근하는 경우에 발생하는 동시성 문제도 해결할 수 있다.

 

class Node
{
    private static Node singleton;
    // 싱글톤의 특성은 생성자가 private이다.
    // 그러므로 외부에서 new로 선언할 수가 없다.
    private Node()
    {
    }
    // private이니깐 내부에서 new를 선언한다.
    public static Node GetInstance()
    {
    // static 특성상 프로세스가 종료될 떄까지 한 번 선언된다.
        if (singleton == null)
        {
        	singleton = new Node();
        }
    	return singleton;
    }
}
class Program
{
    static void Main(string[] args)
    {
        //보호 수준때문에 new로 선언할 수 없다.
        //Node node = new Node();
        Node node = Node.GetInstance();
        Console.WriteLine("Press Any Key...");
        Console.ReadKey();
    }
}

 

생성된 메소드는 private로 선언되어 외부에서 호출할 수 없다.

public으로 선언된 GetInstance 메소드를 사용해서 객체만을 호출할 수 있다.

 

장점

인스턴스가 한번에 호출되어 메모리 효율을 높일 수 있다.

클래스를 메모리에 할당하는 속도를 줄일 수 있다.

두번째 호출부터는 객체 로딩시간이 줄어든다.

다른 인스턴스와 공유가 쉽다.

 

단점

생성자가 private이기 때문에 상속을 할 수 없다.

이를 극복하기 위해 DI(의존성 주입)을 사용한다.

싱글톤으로 생성된 인스턴스가 다른 클래스의 인스턴스들과 많은 데이터를 공유할 경우 OCP원칙(Open-Closed-Principle: 개방 폐쇄 원칙)을 어기게 된다

객체 지향 설계 원칙에 어긋나며 수정이 어려워지고 테스트하기 어려워진다.

 

 

 참고 : nowonbun.tistory.com/431

 

[Design Pattern] 싱글톤 패턴 (Singleton)

안녕하세요. 명월입니다. 이 글은 디자인 패턴의 싱글톤에 대한 설명입니다. 디자인 패턴은 못 들어봤어도 싱글톤 패턴에 대해서는 들어봤을 정도로 유명한 패턴입니다. class Node { private static Nod

nowonbun.tistory.com

 

다음 포스트는 DI(Dependency Injection : 의존성 주입) 패턴에 대한 포스트일것입니다. 

반응형