본문 바로가기

프로그래밍/C++

싱글톤~ 기초

싱글톤!

 

자신이 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++' 카테고리의 다른 글

#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