싱글턴 패턴이란 ?
전역변수를 사용하지 않도록 객체 하나만을 생성하도록 하며, 생성된 객체는 어디서든 참조할 수 있도록 하는 디자인패턴
싱글톤 패턴은 다음과 같은 상황에 적용할 수 있다.
- 프로그램 내 에서 어떤 객체가 단 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: 개방 폐쇄 원칙)을 어기게 된다
객체 지향 설계 원칙에 어긋나며 수정이 어려워지고 테스트하기 어려워진다.
다음 포스트는 DI(Dependency Injection : 의존성 주입) 패턴에 대한 포스트일것입니다.
반응형
'프로그래밍 공통' 카테고리의 다른 글
Git Submodule - Permission Denied 문제 해결방법 (0) | 2023.06.22 |
---|---|
DI(Dependency Injection : 의존성 주입) (0) | 2020.11.10 |
Cookie, Local Storage, Session Storage 각각의 차이점 (0) | 2020.11.05 |