메타 프로그래밍
메타프로그래밍이란?
간단히 말해 프로그램이 코드를 수정하도록 하는 프로그래밍이라고 볼 수 있다. 정확하게 어떤 기법이라기보다는 그러한 개념 전반을 메타 프로그래밍이라고 부르는데, 어떤 프로그램이 다른 언어로 작성된 코드를 열어 ‘문자열’을 고치듯이 코드를 수정하거나 같은 언어끼리, 심지어는 스스로가 수정해도 모두 메타 프로그래밍의 범주에 들어간다. 요즘 나오는 프로그래밍 언어들은 설계부터 메타프로그래밍을 지원하는 경우가 많다.
이러한 메타 프로그래밍의 아이디어는 복수의 언어를 다루는 코더에게 특히 유용하다. 대부분의 프로그래밍 언어는 어딘가에 특화되어 있든 여러가지 환경에 사용할 수 있든, 적어도 하나의 장점은 가지게 마련이다. 이를 적재적소에 사용하는 것까지는 좋은데, 인간이 제어하는 이상 프로젝트가 커지고 복잡해질수록 생산성이 떨어지게 되어있다. 그렇다면 이것을 제어하는 것조차 프로그램에게 맡긴다면? 여러 언어로 적성된 코드를 수작업으로 하나하나 열어서 고치는 게 아니라, 그 일련의 과정이 자동화될 수 있는 것이다.
프로그램을 수정한다는 그 개념 자체로 접근해보아도 사용할 곳은 많다. 특히 생산성이 떨어지는 옛날 언어들, 라이브러리나 이미 보증된 코드를 옮기는 짓은 못하겠는데 꼭 인수로 전달하고 싶은 게 일급객체가 아니거나 할 때도 메타 프로그래밍은 빛을 발한다. ‘내가 직접 바꿔가면서 노가다하면 당장은 돌아가는데, 이 짓도 한 두번이지 더 이상 못하겠다’는 상황에 딱 맞는 해법이 바로 메타 프로그래밍이다.
물론 이런 것들은 단지 예시에 불과하고, 그 응용은 실로 무궁무진하다. 기본적으로 메타 프로그래밍이라는 개념을 어떻게 쓸지는 코더의 창의력에 달린 것이겠지만, 이런 방법이 있다는 걸 알고 모르고는 하늘과 땅 정도의 차이가 있다.