프로그래밍





2015/07/20 10:39

STL 컨테이너 - 2. 템플릿(Template) <1> C/C++

1. 자료구조

템플릿에 대해 설명하기 전에 자료구조에 대해 조금 알고 가는게 좋다.

자료구조는 기본적으로 선형 자료구조와 비선형 자료구조로 나누어 진다.

선형 자료구조 - 데이터들을 순차적으로 나열시킨 구조

비선형 자료구조 - 데이터들이 비순차적으로 원 또는 사이클 형태로 이루어진 구조

라고 할 수 있다.
c++ 에서 기본적으로 지원하는 자료구조는 배열이고 추가로 STL을 사용하게 되면 백터, 맵, 셋 등을 사용 할 수 있다.

STL에서는 이런 자료구조를 컨테이너로 표현하고 있기 때문에 
개요에서 컨테이너를 '데이터를 저장하는 배열을 클래스화 해서 미리 정의 한 것'이라고 한것이다.

그리고 컨테이너는 템플릿이라는 기능을 사용해서 표현하고 있다.

이제 우리는 컨테이너와 자료구조가 무엇인지 알았기 때문에 STL이 무엇인지 알수 있을것이다.

결국 지금까지 이야기 한것을 종합해 보면

표준 템플릿 라이브러리(STL)은 이렇게 정의 할 수 있다.

C++에서 다루고 있는 일반적인 자료구조와 알고리즘을 쓰기 쉽게 구현해 놓은 라이브러리


2. 템플릿

이제 STL이 무엇인지 알았으니 STL에서 사용하고 있는 템플릿이 무엇인지 알아보자.
템플릿을 간단히 정의하면 틀을 미리 만드는 것이다.

C++언어에서는 템플릿이라는 키워드를 통해 가상의 코드를 만들고, 그 코드를 컴파일러가 컴파일 하는 과정에서
코드를 구체화 시켜 프로그램을 생성한다.

이렇게 글로만 보면 어렵기 때문에 예제 코드를 통해 알아보겠다.

템플릿의 문법은 다음과 같다.


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#include <iostream>

 

using namespace std;

 

template <typename T>

 

void TestFunc(T t)

{

    cout << t << endl;

}

 

int main()

{

    TestFunc(1);

    TestFunc('a');

    return 0;

}

 


Output:

1
a



여기서 주목해야 할 부분은 5번과 7번 줄이다. 

이코드에서는 T라는 형식을 템플릿으로 표현해주고 있고, 

7번줄에서는 TestFunc 함수에서 T라는 템플릿을 매개변수로 받고 있다.


이를 통해 14~15줄을 보면 서로 다른 정수형 값과 문자가 들어갔지만 컴파일러가 형식을 알아서 변환해 출력해주고 있다.


즉, 템플릿 키워드를 통해 정의한 코드는 가상의 코드이고 실제 코드는 컴파일시에 생성하겠다는 선언으로

T t 라는 매개변수를 컴파일러는 인자에 맞게 int t 와 char t로 알아서 변환해주고 있는것이다.


이를 템플릿이라고 한다.


이런 템플릿에 대한 내용은 내용이 상당히 많기 때문에 다음 포스팅에서 계속 이어 설명하도록 하겠다.




덧글

  • 1234 2015/07/20 13:38 # 삭제 답글

    템플릿 요즘 사이트에서 짬짬히 하고 있는데... 예제 만들때 기본타입(int)등등은 실제 개발시 도움안되고 ... 구조체나 클래스를 인자 T로 받지 않으면 실력 안늘더군요.
  • 하얀깃발 2015/07/21 09:47 #

    사실 변수보다는 클래스나 구조체를 템플릿화 해서 사용하는게 대부분이긴 합니다ㅎㅎ
댓글 입력 영역