반응형
싱글톤 패턴 (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 구현이 필요할 수 있다.
반응형
'Programming > 프로그래밍 이론' 카테고리의 다른 글
[프로그래밍 이론] JWT (Json Web Token) (0) | 2019.04.19 |
---|---|
[디자인 패턴] 팩토리 메소드 패턴 (Factory method pattern) (0) | 2019.03.20 |
[디자인 패턴] 복합체 패턴 (Composite pattern) (0) | 2019.03.12 |
[디자인 패턴] 빌더 패턴 (Builder pattern) (2) | 2019.03.09 |
[디자인 패턴] 추상 팩토리 패턴 (Abstract factory pattern) (0) | 2019.02.14 |
댓글