메타프로그래밍

메타프로그래밍(Metaprogramming)이란 자기 자신 혹은 다른 컴퓨터 프로그램을 데이터로 취급하며 프로그램을 작성·수정하는 것을 말한다. 넓은 의미에서, 런타임에 수행해야 할 작업의 일부를 컴파일 타임 동안 수행하는 프로그램을 말하기도 한다.

메타 프로그래밍에 이용되는 언어를 메타 언어라고 하고, 메타 프로그래밍의 대상이 되는 언어를 대상 언어라고 한다. 한 프로그래밍 언어가 자기 자신의 메타 언어가 되는 것을 반영이라고 한다. 메타 프로그래밍이 동작하는 방식은 세 가지 종류가 있다[출처 필요].

첫째 방식은, 런타임 엔진 코드를 API를 통해 프로그램에 노출시키는 방식이다.

둘째 방식은, 문자열이나 혹은 다른 형태로 된 프로그래밍 명령을 동적으로 수행시키는 방식이다. 둘째 방식을 이용하면 프로그램이 프로그램을 작성하게 할 수 있다[1]. 한 언어가 이 두 방식을 동시에 취할 수도 있으나, 대개의 언어들은 둘 중 한 방식으로 치우치는 경향이 있다.

셋째 방식은, 해당 언어의 범주를 완전히 벗어나는 것이다. 범용 프로그램 변환(program transformation) 시스템은 일반적인 메타프로그래밍을 직접 구현한다. 이와 같은 방식은 해당 언어에서 메타 프로그램 지원 여부와 상관없이 거의 모든 대상 언어에 적용될 수 있다.

종류에는 3가지가 있는데 타입 내성 또는 타입 자기성찰(Type Introspection), 반영(Reflection), 자기-수정 코드(Self-Modifying Code)이다. 타입 자기성찰은 수행중인 프로그램에서 변수나 함수들의 타입이나 속성을 알아내는 능력을 말한다. 반영(Reflection)은 실행중인 프로그램 자신의 구조와 행동을 조사하고 자가성찰(introspect) 하고 변경할 수 있는 능력을 말한다. 자기-수정 코드(Self-Modifying Code)는 코드를 스스로 고칠 수 있는 것을 말하는 것이다. 메타 프로그래밍의 종류가 구현되어 있는 언어로는 자바, 파이썬, Go, Lisp 등이 있다.

각주 편집

  1. for example, instance_eval in Ruby takes a string or an anonymous function. “Rdoc for Class: BasicObject (Ruby 1.9.3) - instance_eval”. 2011년 12월 30일에 확인함.