관리 메뉴

History

[C++] 템플릿(template)에 대하여 step1 본문

C,C++/개념 실습 프로그래밍

[C++] 템플릿(template)에 대하여 step1

luckybee 2023. 5. 16. 19:01
728x90
반응형

이번 차시 게시글에서는 템플릿과 STL에 대해서 공부한 내용을 간단히 써보려고 한다.

1.  템플릿이란?

 

템플릿이란 본떠서 찍어내기 위해 만들어진 틀이라는 뜻을 가지고 있다. 이렇게 코드를 찍어내듯이 생산할 수 있도록 일반화(generic) 시키는 도구가 템플릿이다.

 

2. 템플릿은 어떨때 사용하나?

 

템플릿은 함수의 중복이 있을 때 사용하면 용이하다. 함수의 이름은 같지만 인자값이 달라도 실행은 된다. 이것이 오버로딩이라고 한다. 그러나 오버로딩을 쓰는 이유는 같은 기능을 하지만 자료형이 다를 때 많이 쓰이는 개념이기도 하다. 

 

그래서 개발자는 함수의 이름의 중복을 생각하지 않고 편하게 쓸 수 있지만, 이렇게 프로그래밍을 진행하게 된다면 코드의 줄 수는 어마무시하게 늘어날 것이다. 

 

템플릿은 이런 중복 함수를 일반화하여 단순하게 코드를 작성할 수 있다.

 

아래 예시 코드를 보자.

void Swap(int *a,int *b)
{
	int temp;
    temp=*a;
    a=b;
    *b=temp
}

void Swap(float *a,float *b)
{
	float temp;
    temp=*a;
    a=b;
    *b=temp
}

위 코드는 오버로딩하여 짜여진 코드이다. 이제 이것을 일반화시키는 템플릿을 사용하면 아래와 같다.

 

template <class T>
//template 템플릿을 선언하는 키워드
//class 제네릭 타입을 선언하는 키워드
//T 제네릭 타입 T 선언 -> 변수와 같다.
void MySwap(T* a,T* b)
{
	T temp;
    temp= *a;
    a=b;
    *b=tmep;
}

위와 같은 함수 하나로 모든 자료형을 대응할 수 있도록 만들었다. 이것이 tamplate을 이용한 일반화(제네릭)의 예시이다.

 

3. 템플릿 선언은 알겠어 근데 제네릭 타입은 뭐야?

 

템플릿 함수를 사용할 때는 template이라는 키워드로 시작하고 <Class ?> 나 <typename ?>으로 선언한다.

tmeplate<Class T> 
tmeplate<typename T>

그러면 여기서 질문이 들어온다.

 

제네릭 타입은 몇개까지 선언할 수 있는데?라고, 제네릭 타입은 개발자가 원하는 만큼 써도 되고 이름도 굳이 T로 안 해도 된다.

tmeplate<class Q,class W,class E>

그리고 템플릿은 함수를 한 줄로 써도 된다.

template <class T> void MySwap(T* a,T* b)
{
	T temp;
    temp= *a;
    a=b;
    *b=tmep;
}

 

4. 템플릿의 구체화

 

아무래도 사용하기 편리한 기능들은 무겁기 마련이다. 템플릿도 무거운 기능중 하나이다. 다양한 자료형을 받을 수 있기 때문이다. 템플릿은 함수의 호출부에서 구체화 작업을 한다. 예를 들어 Swap함수의 인자의 타입이 int이면 템플릿 함수가 동작할 때 한번 더 해석을 하여 T타입이 아닌 int형으로 번역한다. 그런 다음에 컴파일이 되어서 실행되는 것이다.  

728x90
반응형
Comments