1. 개요
Metaprogramming메타프로그래밍이란 자기 자신을 포함한 어떠한 프로그램/소스코드를 수정하거나 생성하는 프로그래밍 기법이다.
예를 들자면, 어떠한 동작을 수행하는 코드는 '프로그래밍'이며, 이러한 코드를 받아 변형하여 추가적인 기능을 덧붙이는 코드는 '메타프로그래밍'이다.
메타프로그래밍은 엄밀히 정의된 개념은 아니며, 이를 응용한 각 기술들에 따라 의미하는 바가 달라질 수 있다. 우선 코드의 변형이 런타임 시간, 컴파일 시간에 이뤄지는지도 확실하지 않고, 그 행위가 코드의 수정/생성인지, 아니면 단순히 코드상에만 존재하는 개념을 실행시에 확인할 수 있도록 하는지도 확립된 바는 없다.
2. 기술 목록
- C++ 템플릿: 보편적인 자료형을 위한 로직을 작성하면 컴파일 시점에 각각의 자료형에 알맞는 실행 코드를 생성한다.
- C++ 메타 프로그래밍: 템플릿을 응용한 메타 프로그래밍에 관한 설명서.
- 리플랙션: 코드가 컴파일된 이후에는 존재하지 않는 프로그래밍 요소들을[1] 런타임시에도 얻을 수 있도록 한다.
- 매크로: 언어의 어휘 요소, 문법 요소를 컴파일 단계에서 동적으로 생성하는 처리 계층.
- 데코레이터: 특정 요소(함수, 메서드, 클래스 등)에 데코레이터를 명시하면, 함수의 실행 전후에 외부 로직이 실행될 수 있다.
- JavaScript Proxy: 함수 혹은 객체의 접근/변경을 발생시킬 때, 직접적인 동작 직전에 사전 정의된 함수가 실행되어 데이터 처리 등을 수행한다.
- 트랜스파일러: 한 코드를 다른 언어의 코드로 변환한다.
- 코드 생성기: 특정 스키마 혹은 형식을 바탕으로, 이를 따르는 원하는 언어의 구현을 자동적으로 생성한다.
- 동적 코드 실행: 주어진 문자열을 런타임 시간에 분석하여 실행한다.
3. 관련 문서
[1] 클래스의 매서드 구조, 함수의 인자 타입, 코드 텍스트 자체 등등