본문 바로가기
Dev/etc

메타프로그래밍

by 펭귄안에 온천 2023. 2. 19.
728x90
반응형

메타프로그래밍

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

메타 프로그래밍에 이용되는 언어를 메타 언어라고 하고, 메타 프로그래밍의 대상이 되는 언어를 대상 언어라고 한다. 한 프로그래밍 언어가 자기 자신의 메타 언어가 되는 것을 반영이라고 한다. 메타 프로그래밍이 동작하는 방식은 세 가지 종류가 있다 -위키백과-

 

컴파일 되었을때 1010101와 같이 컴퓨터가 이해할 수 있는 언어로 변환 되는것이 아닌

코드를 수정하거나 생성하는 프로그래밍이라고 볼 수 있다.

 

정확하게 어떤 기법과 기술이라는것이 아닌 그러한 개념 전반을 메타 프로그래밍이라고 부른다.

어떤 프로그램이 다른 언어로 또는 같은 언어로 작성된 코드를 수정하는것이 메타 프로그래밍 범주에 들어간다.

 

- 템플릿 메타 프로그래밍 : 컴파일러가 컴파일 할떄 코드를 생성하여 일종의 코드 생성 기능

- 리플렉션 : 런타임시 실행되며 실행 중인 코드를 분삭하여 동적으로 코드를 생성하거나 조작

장단점

장점

  •  컴파일 타임에 최적화가 이루어지므로 결과 실행 시 수행 속도가 빨라질 수 있다.
  •  무결성, 소스 코드의 재활용 등으로 복붙등의 과정을 줄일 수 있어 무결성 및 관리성이 높아진다.
  •  여러 가지 기능을 템플릿에 정의해서 작성하고 이를 결과 언어로 적절하게 표현하기 때문에 기능상 확장을 손쉽게 가져 올 수 있다.

단점

  • 컴파일에 의해서 새로운 코드가 생성되는 구조이기 때문에 컴파일에 대한 의존도가 높아지며 이식성의 문제가 발생 할 수 있다.
  • 일반적으로 템플릿 메타프로그래밍은 또 다른 형식으로 프로그래밍하기 때문에 코드 자체가 난해진다.( 해독성 의 문제)

메타프로그래밍의 예

타입스크립트

  •  자바스크립트에 타입을 추가
  •  타입 정보를 사용하여 컴파일 타임에 코드를 검증하여 높은 안정성 제
  •  타입스크립트로 작성된 코드를 컴파일 하면 기계어가 아닌 자바스크립트 코드가 나온다. 
  •  complie 대신에 transplie이라고도 한다.

 

자바, 스프링의 어노테이이션

  • 사전적 의미로는 주석이라는 뜻을 가지고 있다.
  • 소스 코드에 추가해서 사용하는 메타 데이터의 일종이며 테이터 처리 방법이 아닌 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야 하는지를 알려주기 위한 정보다.
  • 컴파일러에게 코드 문법체크 하도록 정보 제공
  • 런타임시 특정 기능을 실행하도록 정보 제공
  • 실행, 배포시 특정 코드를 자동으로 생성할 수 있도록 정보 제공
반응형

'Dev > etc' 카테고리의 다른 글

download all files from an object in MinIO  (0) 2023.03.29
함수형 프로그래밍  (0) 2023.02.23
데이터 중심 아키텍처(DB/SQL 중심)  (0) 2023.02.08
데코레이터 패턴  (0) 2022.12.02
전략패턴  (0) 2022.12.02