프로그래밍/디자인 패턴 2007/11/09 15:57
이전 블로그의 글을 옮겼습니다.
- 정의
- 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴
- 용도
- 쓰레드에서 참조되는 클래스, 쓰레드풀, 자원풀, 연결풀 등..
- 기본적인 사용법
- 생성자를 private으로 둔다.
- 이렇게 하면 객체를 생성할때 new 할 수 없기때문에 다른 방법으로 객체를 생성해야 한다.
- 싱글턴 패턴의 객체는 직접만드는것이 아니라 클래스에 객체의 참조를 요청하는 것이다.
- 그러기 위해서 객체를 넘겨주는 정적 메서드와 참조를 객체를 저장하는 정적 변수가 필요하다.
- 싱글턴 클래스는 정적 메서드를 통해 객체에 접근할 수 있는데, 이때 첫 요청이라면 new 를하고 이미 객체가 생성되어져 있다면 해당 참조를 리턴해 준다.
- 생성자를 private으로 둔다.
- 쓰레드에서의 보호
- volatile 키워드와 lock 키워드를 이용해서 인스턴스를 담아주는 변수를 보호해 줘야한다.
- 그렇지 않으면 쓰레드내에서 두개의 메서드를 생성하려는 시도가 있을 수 있고 이는 곧 예외로 이어진다.
- 기본적인 예제
using System;
using System.Configuration;
namespace Chapter05_Singleton
{
public class Singleton
{
private static volatile Singleton uniqueInstance;
private static object syncRoot = new object();
private Singleton() // 싱글턴패턴은 생성자가 private
{
}
public static Singleton GetInstance() // 인스턴를 생성해서 넘겨주는 정적 메서드가 따로있음
{
if (uniqueInstance == null) // 인스턴스가 없을때만 만들어줌
{
lock (syncRoot) // 쓰레드에서 보호하기 위하여 사용
{
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
}
http://lemonwidz.com/tc/trackback/11


0