자신이 C++을 할 줄 안다고 생각한다면 이건 기본입니다 ㄱ-
젭 라좀... 싱글톤에 대한 개념과 사용법 정도는 공부해요 우리
싱글톤에 대해 할면 물어볼 가능성 Zero인 질문때문에 저는 햄보칼수가 엄써여
[싱글톤] 혹은 [단일체] 라고 불리우는 기법입니다.
같은 뜻으로 이음동어라고 보시면 되겠습니다.
일 단 한마디로 정의하자면
'프로그램을 굴렸을 경우 절대로 1개밖에 존재 할 수 없는 클래스'입니다.
////////////////////////////////////////////////////////////////////////////////
1 개밖에 못만들게 제한을 거는 방법
class 싱글톤
{
private:
싱글톤( ) ;
~싱글톤( ) ;
} ;
위와같이 코드를 짜면
int main( )
{
싱글톤 myClass ;
}
이런 코드는 에러가 떨어집니다.
클래스를 만드는 순간 생성자가 자동으로 불러진다는 것은 모두 아실겁니다.
생 성자를 private로 만들었기 때문에 'private맴버인 생성자를 main함수에서 호출 불가!'라고 합니다.
다 음~ 인스턴스 생성하기
class 싱글톤
{
private:
싱글톤( ) ;
~싱글톤( ) ;
static 싱글톤 *m_pThis ;
public:
싱 글톤 *getPointer( )
{
if( !m_pThis )
m_pThis = new 싱글톤[1] ;
return m_pThis ;
}
} ;
싱 글톤 * 싱글톤::m_pThis = NULL ;
싱글톤 *g_class = NULL ;
int main( )
{
g_class = g_class->getPointer( ) ;
}
////////////////////////////////////////////////////////////////////////////////
끝 났습니다. -_-;
싱글톤::m_pThis는 static변수이기 때 문 에 !!
프 로그램이 실행되는 순간 메모리에 잡히게 됩니다.
클래스가 몇개 만들어지는지 프로그램이 실행되는 순간에 알 수가 없기 때문에
클래스의 static맴버는 공유됩니다.
class myClass
{
static int k ;
} ;
int myClass::k = 0 ;
int main( )
{
myClass test[500] ;
}
test[0].k
test[1].k
.
.
.
test[499].k
500 개의 클래스가 전부 변수k하나를 공유하게됩니다.
최초 getPointer( ) 를 호출하게 되면 m_pThis에 메모리를 잡아서 주소를 넣어주고
그 값을 리턴합니다.
이 후 getPointer( )를 언제 어디서 아무리 불러도 m_pThis에 들어있는 주소값만 반환합니다.
언 제 어느곳에서 getPointer을 불러도 m_pThis는 하나뿐이고 따라서 돌려주는 주소값도 동일합니다.
이 제 남은일은 g_class->변수명or함수명 이런식으로 사용하는 일만 남았습니다.
언 제 어디서 어떻게 사용하던 한개의 인스턴스를 공유하게 됩니다.
----------------------------------------------------------------------------------
A.cpp
----------------------------------------------------------------------------------
#include "싱글톤.h"
int main( )
{
싱글톤 *class ;
class = class->getPointer( ) ;
}
----------------------------------------------------------------------------------
B.cpp
----------------------------------------------------------------------------------
#include "싱글톤.h"
int myfunction( )
{
싱글톤 *class ;
class = class->getPointer( ) ;
}
위 와같이 두개의 다른 파일에서 각각 생성해서 사용해도
getPointer( ) 해서 얻어지는 주소값은 모두 동일!!
class라는 변수에는 같은 주소값이 들어있으니 결국 같은 객체를 공통적으로 사용하는 것이죠 -_-;
#include "헤더파일"
싱글톤 *g_class = NULL ;
{
g_class = g_class->getPointer( ) ;
}
저 것만으로 언제 어디서든 같은 클래스의 주소를 참조해서 서로 가지고 놀 수 있다는 사실이
놀랍고 멋지지 않습니까?
다른 파일간에 공유하고싶은 다른 클래스간에 공유하고싶은 값이 있다면
싱 글톤으로 해결하시기 바랍니다.
많이많이 써주세요 좀!!
2개이상일 필요가 없는 여러곳에서 사용하는 클래스는 다 싱글톤으로 하셔도 무방합니다.
[출처] 싱글톤 단일체 (C언어를 배우자) |작성자 고또
'프로그래밍 > C++' 카테고리의 다른 글
#pragma pack( push, 1 ) (0) | 2014.03.17 |
---|---|
[문자 함수(isupper, isalnum, isalpha 등)] (0) | 2014.02.14 |
참고사항 즐겨찾기 (0) | 2011.01.17 |
C++ (0) | 2010.05.20 |
클레스 (0) | 2010.05.20 |