// .h file
struct Object {/*...*/}
template<class T> struct Singleton {/*...*/}

// 2개 이상의 .cpp file 에서 include 하면 컴파일 에러가 발생한다. (중복)
Object var;

// <매우 주의!!!>
// 컴파일은 가능하나, include 한 .cpp 파일별로 각자 변수가 생성/할당 된다. (지역변수 개념)
static Object var;

// 컴파일러에게 cpp파일중에 정의되어 있으니 패스하라는 의미. (선언용도)
// 모든 .cpp 파일이 공유하는 전역변수이다.
// 사용하고자 하는 파일에서는 extern을 통해 선언하고 사용해야 한다.
// 단, .cpp 어딘가에 정의는 되어 있어야 한다. (컴파일)
extern Object var;

// Singleton Design Pattern 을 이용해서 전역변수 생성.
// extern 과 다르게 명시적으로 정의된 위치를 찾기 쉽다.
typedef Singleton<Object> var;