검색결과 리스트
Singletone pattern에 해당되는 글 1건
- 2011.11.29 [Design] Singtone Pattern
글
싱글톤 패턴..
유일하게 하나의 정의만 있어야 하는 패턴이다.
일반적으로 우리가 쓰는 싱글톤은 다음과 같이 쓸 것이다.
Object m_obj;
Object _obj
{
get
{
if(m_obj==null)
m_obj = new Object
return m_obj;
{
}
하지만 여기에서 문제가 있다.
멀티스레드에 의해서 생기는 문제로 동기화가 되지 않아 여러번 생성이 된다는 경우가 종종 생긴다.
그럴 경우에는 분명 데이터가 뒤죽 박죽으로 흘러 갈 것이다.
그 다음으로 쓰는 방법이 아마 일반적으로 static 을 이용 할 것이다.
static Object m_obj;
static Object _obj
{
get
{
if(m_obj==null)
m_obj = new Object
return m_obj;
{
}
이는 어느 정도 문제를 해결해 주지만 한번도 쓰이지 않을 경우 메모리만 선점하고 있다는 문제가 생긴다.
필자도 저 방식으로 종종 쓰는 경우가 많다(쓰레드 환경 제외)
멀티쓰레드라면 아마 이 방법이 제일 좋을 것 같다. lock 키워드를 이용하는 것이다.
(lock은 monitor와 같이 동기화를 이용 할 때 쓰는 키워드이다.)
static Object m_obj;
static Object _obj
{
get
{
if(m_obj==null)
lock(m_obj)
{
m_obj = new Object
}
return m_obj;
{
}
이 방법은 인스턴트 생성시 걸리는 시간 때문이다. 이렇게 lock을 걸어 둔다면 멀티쓰레드 환경 상에서는 최소한의 속도가 유지 될 것이다.
유일하게 하나의 정의만 있어야 하는 패턴이다.
일반적으로 우리가 쓰는 싱글톤은 다음과 같이 쓸 것이다.
Object m_obj;
Object _obj
{
get
{
if(m_obj==null)
m_obj = new Object
return m_obj;
{
}
하지만 여기에서 문제가 있다.
멀티스레드에 의해서 생기는 문제로 동기화가 되지 않아 여러번 생성이 된다는 경우가 종종 생긴다.
그럴 경우에는 분명 데이터가 뒤죽 박죽으로 흘러 갈 것이다.
그 다음으로 쓰는 방법이 아마 일반적으로 static 을 이용 할 것이다.
static Object m_obj;
static Object _obj
{
get
{
if(m_obj==null)
m_obj = new Object
return m_obj;
{
}
이는 어느 정도 문제를 해결해 주지만 한번도 쓰이지 않을 경우 메모리만 선점하고 있다는 문제가 생긴다.
필자도 저 방식으로 종종 쓰는 경우가 많다(쓰레드 환경 제외)
멀티쓰레드라면 아마 이 방법이 제일 좋을 것 같다. lock 키워드를 이용하는 것이다.
(lock은 monitor와 같이 동기화를 이용 할 때 쓰는 키워드이다.)
static Object m_obj;
static Object _obj
{
get
{
if(m_obj==null)
lock(m_obj)
{
m_obj = new Object
}
return m_obj;
{
}
이 방법은 인스턴트 생성시 걸리는 시간 때문이다. 이렇게 lock을 걸어 둔다면 멀티쓰레드 환경 상에서는 최소한의 속도가 유지 될 것이다.
RECENT COMMENT