( 본 게시글은 작성자가 메모용으로 사용하는 용도임을 밝힙니다. 정보가 불확실할 수 있으니 참고 부탁드립니다 )

 

템플릿 ( Template )은 함수나 클래스를 개별적으로 다시 작성하지 않아도, 여러 자료형으로 사용할 수 있도록 하는 틀과 같은 개념이다. 오버로드와 다르게, 자료형마다 따로 함수를 작성하지 않아도, 하나의 틀만을 만들어 원하는 자료형으로 찍어낼 수 있다. 여기서 템플릿의 틀을 만드는 과정을 일반화 ( Generic )라고 한다. 템플릿은 함수 템플릿과 클래스 템플릿으로 나눌 수 있다.

 

1. 함수 템플릿 ( Function Template )

 

위 함수는 현재 각각 정수와 실수의 인자 2개를 받아 덧셈을 진행하는 함수이다. 자료형마다 각각 함수를 작성해야하지만, 템플릿을 사용하면 이는 하나의 함수로 일반화시킬 수 있다.

add 함수위에 template<typename T>를 작성하였고, 함수 add는 T라는 자료형을 반환한다. 매개변수 또한 T를 참조한다. 여기서 템플릿 T의 자료형은 사용자가 함수를 호출할때 어떤 자료형을 주는가에 따라 달라진다. 정수의 값으로 호출한다면 정수가 될것이고, 실수의 값으로 호출한다면 실수가 될 것이다.

 

매개변수에 두개의 템플릿이 있을때도 가능하다.

먼저 string 자료형의 s1, s2를 Print함수로 먼저 출력한 후 Sum으로 두 문자열을 합쳐봤다.

s1, s2가 string 자료형이기 때문에, Print와 Sum은 string 자료형을 사용하게 된다.

아래와 같이 합쳐진 문자열이 나오는 것을 알 수 있다.

 

2. 템플릿 특수화 ( Template Specialization )

템플릿을 사용할때 특수한 자료형에 대해서 다른 처리를 하고싶을때 사용한다. 특수화를 사용할땐 위의 예제처럼 template 다음 <> 안에 자료형을 작성하지 않고, 함수 명 옆에 자료형을 작성한다. 

 

3. 클래스 템플릿 ( Class Template )

클래스 내부의 멤버 변수 타입에 대해서 템플릿으로 선언할때 사용한다. 이때 주의해야할 건 멤버 함수를 만약 외부에서 정의 해준다면 템플릿을 다시 선언해줘야 한다. 그리고 클래스 템플릿은 객체를 생성할때 자료형을 명시해줘야 한다. 

위에서 객체 p1은 int 자료형을 사용하고 있고, p2는 string 자료형을 사용한다는 명시를 하고 있다.

+ Recent posts