더북(TheBook)

1.2 | 템플릿

 

템플릿은 함수나 클래스를 매개변수로 작성한 명세라 할 수 있다. 컴파일러는 템플릿을 사용해서 필요할 때 함수나 클래스 정의를 생성한다. 코드에서 함수 템플릿이나 클래스 템플릿 타입을 사용할 때 이런 일이 일어난다. 또한, 매개변수화 타입 별칭(parameterized type alias)으로 템플릿을 정의할 수도 있다. 따라서 템플릿은 실행할 수 있는 코드가 아니다. 정확히는 코드를 생성하는 청사진이나 방법과 같다. 프로그램에서 사용하지 않는 템플릿은 컴파일러가 무시해버려서 코드가 아예 생성되지 않는다. 프로그램에 포함된 미사용 템플릿에 오류가 있어도 프로그램의 컴파일과 실행에는 문제가 없을 것이다. 이 템플릿을 사용해서 코드를 생성하고 컴파일할 때까지 템플릿에 있는 오류는 발견되지 않을 것이다.

템플릿으로 생성한 함수나 클래스 정의를 인스턴스 또는 템플릿의 인스턴스화라고 한다. 템플릿 매개변수 값에는 보통 데이터 타입을 쓰기 때문에 타입 값이 int 타입이면 int 타입에 대한 함수나 클래스 정의가 생성되고, 타입 값이 string 타입이면 string 타입에 대한 함수나 클래스 정의가 생성된다. 매개변수 인수에 타입만 써야 하는 건 아니다. 예를 들어 매개변수 지정을 이용하면 정수 인수가 필요한 정수 타입으로 지정할 수 있다. 매우 간단한 함수 템플릿 예제를 보자.

template <typename T> & larger(T& a, T& b)
{
    return a > b ? a : b;
}
 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.