▶ 주제 : 싱글톤 패턴 (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 함수 내부에 동시 접근에 대한 구현이 필요하다.
'Programming > 프로그래밍 이론' 카테고리의 다른 글
[프로그래밍 이론] JWT (Json Web Token) (0) | 2019.04.19 |
---|---|
[디자인 패턴] 팩토리 메소드 패턴 (Factory method pattern) (0) | 2019.03.20 |
[디자인 패턴] 복합체 패턴 (Composite pattern) (0) | 2019.03.12 |
[디자인 패턴] 빌더 패턴 (Builder pattern) (1) | 2019.03.09 |
[디자인 패턴] 추상 팩토리 패턴 (Abstract factory pattern) (0) | 2019.02.14 |
댓글