AspectC++
1. 개요
AspectC++는 C++ 언어의 측면 지향 프로그래밍(AOP)을 구현하기 위한 확장이다. 특정 기능 호출을 추적하는 예시를 통해, AspectC++은 '조인 포인트' API를 제공하여 호출된 함수의 이름과 같은 조인 포인트 정보를 제공하고 접근할 수 있게 한다. 또한 컴파일 시간 유형 정보를 제공하여 측면 내에서 메소드 또는 함수의 인수 유형이나 값, 반환 유형 및 반환 값에 액세스할 수 있도록 한다.
| 이름 | AspectC++ 컴파일러 |
|---|---|
| {"alt":"","caption":"","image_file":""} | |
| 개발자 | 올라프 슈핀치크 (프로젝트 리더), 게오르크 블라슈케, 크리스토프 보르헤르트, 베냐민 크라머, 다니엘 로만, 호르스트 시르마이어, 우테 슈핀치크, 라인하르트 타틀러, 마티아스 어반 |
| 발표일 | 2001년 11월 6일 |
| 최신 버전 | 2.3 |
| 최신 버전 발표일 | 2021년 2월 17일 |
| 프로그래밍 언어 | C++ |
| 운영 체제 | 크로스 플랫폼 |
| 장르 | 소스 대 소스 컴파일러 |
| 라이선스 | GPL 2+ |
| 웹사이트 | AspectC++ 공식 웹사이트 |
-
C++ 프로그래밍 언어 계열 -
C++/CLI
-
C++ 프로그래밍 언어 계열 -
C++/CX
C++/CX는 Windows 런타임 프로그래밍을 위해 C++ 언어를 확장한 것으로, WinRT 객체 생성에 `ref new`를 사용하고, 참조 포인터(`^`)를 활용하며, 다른 언어와의 코드 공유를 위해 메타데이터를 통해 클래스와 멤버를 노출한다. -
관점 지향 프로그래밍 -
Nemerle
Nemerle은 객체 지향 및 함수형 프로그래밍 스타일을 혼합하여 사용할 수 있는 프로그래밍 언어이며, 강력한 형식 추론, 메타프로그래밍 시스템, 다양한 프로그래밍 스타일 지원, .NET 플랫폼 라이브러리 접근 용이성 등의 특징을 갖는다. -
관점 지향 프로그래밍 -
DTrace
DTrace는 시스템과 애플리케이션의 실시간 동작 추적 및 분석을 위한 동적 트레이싱 프레임워크로, 'D' 언어를 사용하여 작성된 스크립트를 통해 다양한 시스템 이벤트 계측 및 분석을 지원하며 여러 운영체제에 적용되어 시스템 분석 및 문제 해결에 기여한다.
2. 예
AOP의 핵심 개념 중 하나인 애스펙트(aspect)를 사용하면 특정 기능에 대한 호출을 추적할 수 있다. 예를 들어, `Tracer` 애스펙트는 `%Iter::Reset` 호출 이전에 메시지를 출력한다. 여기서 `%Iter`는 `Iter`로 끝나는 모든 클래스를 의미한다.
소스 코드에서 '일치하는' 각 위치는 조인 포인트라고 하며, 어드바이스는 해당 코드와 결합된다. AspectC++는 조인 포인트 API를 제공하여 이러한 조인 포인트에 대한 정보를 제공하고 접근할 수 있게 한다.
2.1. AspectJ 코드 예제
aspectj
aspect Tracer
{
advice call("% %Iter::Reset(...)") : before()
{
cerr << "about to call Iter::Reset for " << JoinPoint::signature() << endl;
}
};
```
Tracer 애스펙트는 `Iter`로 끝나는 모든 클래스의 `Reset` 함수가 호출되기 전에 메시지를 출력한다. `%Iter` 문법은 `Iter`로 끝나는 모든 클래스를 의미한다.
소스 코드 내에서 각각의 '일치된' 위치는 조인 포인트라고 부르며, 어드바이스는 해당 코드와 결합된다. AspectC++는 조인 포인트 API를 제공하여 해당 조인 포인트에 대한 정보를 제공하고 접근할 수 있게 한다. 예를 들어 다음 함수는,
```cpp
JoinPoint::signature()
```
호출될 함수의 이름(`%Iter::Reset`와 일치되는)을 반환한다.