위키사전에 의하면..
제네릭 프로그래밍(영어: Generic programming)은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두는 프로그래밍 방식으로, 프로그래밍 언어에 의해 다른 형태로 실장되고 있다.
템플릿 메타프로그래밍(template metaprogramming)은 템플릿을 사용하는 프로그래밍 기법으로, 컴파일러에게 프로그램 코드를 생성하도록 하는 방식이다. 이러한 기법은 컴파일 시점에 많은 것을 결정하도록 하여, 실행 시점의 계산을 줄여준다. 이 기법은 C++ 프로그래밍 언어에서 주로 사용된다.
장점
제네릭 프로그래밍(영어: Generic programming)은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두는 프로그래밍 방식으로, 프로그래밍 언어에 의해 다른 형태로 실장되고 있다.
템플릿 메타프로그래밍(template metaprogramming)은 템플릿을 사용하는 프로그래밍 기법으로, 컴파일러에게 프로그램 코드를 생성하도록 하는 방식이다. 이러한 기법은 컴파일 시점에 많은 것을 결정하도록 하여, 실행 시점의 계산을 줄여준다. 이 기법은 C++ 프로그래밍 언어에서 주로 사용된다.
장점
- 늘어나는 컴파일 시간과 좀 더 빨라지는 실행 시간
- 템플릿 코드는 모두 컴파일 시점에 처리되므로 컴파일 시간이 오래 걸릴 수 있다. 반면, 실행 시점의 계산 중 일부를 컴파일 시점에 처리한 것이므로 실행 코드는 더 효율적이다. 컴파일 속도는 보통 크게 문제가 되지는 않지만, 대형 프로젝트나 템플릿에 많이 의존하는 프로젝트는 이 점이 중요할 수 있다.
- 일반화 프로그래밍(Generic Programming)
- 템플릿 메타프로그래밍은 프로그래머로 하여금 구조에 집중하게 하고 클라이언트 코드가 필요한 구현을 컴파일러로 하여금 하도록 한다. 따라서 템플릿 메타프로그래밍은 진정한 일반화 코드가 된다. 그리고 필요 코드가 최소화되고 유지보수도 쉬워진다.
[편집] 단점
- 가독성
- 템플릿 메타프로그래밍의 문법과 형태는 일반적인 C++ 프로그래밍에 비해 난해하다. C++ 프로그램 쪽이 더 고급기법을 썼거나, 매우 심오하게 짜여졌다 하더라도 템플릿 메타프로그래밍이 더 난해할 수 있다. 그래서 템플릿 메타프로그래밍으로 짜여진 프로그램을 유지보수해야하는 비숙련 프로그래머는 곤란함을 겪는다.
- 컴파일러에 의존적로 인한 표준 보다는 낮은 이식성
- 컴파일러마다 템플릿을 사용하는 방법이 다르다. 따라서 템플릿 메타프로그래밍은 컴파일러에 크게 의존하며 이식성 문제 - 특히 최근의 메타프로그래밍에서 - 를 갖고 있다.