클래스 (객체지향)

템플릿(Template) 개념정리

1. 템플릿(Template) 이란 무엇인가?

템플릿이란 데이터 타입을 정확히명시하지않고 클래스를 생성할때 데이터타입을 정하므로써 여러자료형마다 각각 오버로딩(overloading) 할필요없이 같은 역활을 하는 클래스, 메소드를 하나만 만들어서 다향한 데이터 타입을 사용하게하는 틀이다.

 

그렇기때문에 자료형대신 특수하게 약속된 키워드 (주로 한개일때는T 여러개일때는 T1,T2... 로 사용됨)을 사용한다.

 

템플릿은 크게 함수템플릿(method template)과 클래스 템플릿(class template)으로 나눠지는데 하는역활은 비슷하다.

 

2. 예제

템플릿을 사용하는곳은 많지만 대표적으로 사용하는 자료구조중 하나인 스택(stack)에서 사용하는 예제와 싱글톤패턴(singleton pattern)에서 사용하는 예제를 가져와봤다.

2.1. 자료구조(stack)에서 사용하는 템플릿

template<typename T>
class Stack
{
	T *values;
	int maxSize;
	int currentlySize;
public:
	Stack(int size) { 
		maxSize = size;
		values = new T[size]; 
		currentlySize = 0;
	}

	Stack() {}
	~Stack() {}
	void Push(T value) {
		bool check = isFull();
		assert(check == false);
		values[++currentlySize] = value;
	}

	T Pop() {
		bool check = isEmpty();
		assert(check == false);
		return values[currentlySize--];
	}
	

	int Size() { return currentlySize; }
	int MaxSize() { return maxSize; }
	bool isEmpty() { return currentlySize == 0 ? true : false; }
	bool isFull() { return currentlySize == maxSize ? true : false; }
};

2.2 싱글톤 패턴(singleton pattern)에 사용하는 템플릿

template <typename T>
class Singleton
{
public:
	static T* GetInst() {
		if (instance)
		{
			instance = new T;
		}return instance;
	}
	static T* DestroyInst() {
		SAFE_DELETE(instance);
	}
private:
	static T* instance;
	Singleton();
	~Singleton();
};