최상단

컨텐츠

AOP(Aspect Oriented Programming) 그리고.. aspect C++ 에 대해서..

글 정보

Category
컴퓨터 이야기
2009. 7. 4. 00:38

본문

 
학교 다닐 때나 회사에서나 주 개발 언어는 C, C++을 많이 사용하는데, 주로 C++의 class 개념만 가져다 쓰는 정도였습니다. (즉, oop의 개념은 아주 희박한 확률로 상속만 쓴다는...;;; ).. 그런데 요즘 틈틈히 디자인 패턴을 공부하면서 OOP적인 개발(?)에 점점 관심이 가네요.
그러던 중.. 자바의 스프링 이라는 프레임웍을 알게 되었고..어떤것인가 궁금해서 찾아보던 중.......AOP라는 개념을 알았네요.
절차중심의 프로그래밍 방식에서 발전된...객체 지향 프로그래밍..........그리고 그에서 더 발전된(?) 측면 지향 프로그래밍....혹은 관점 지향 프로그래밍........
아직 AOP가 어떻다..라고 정의할 정도의 레벨은 안되지만...(OOP도 설명 못하는 마당에..ㅋㅋ)
제가 생각하는 AOP는... OOP의 객체의 개념을 좀 더 분리시킬수 있는 방안...정도로 이해가 되네요....
하나의 클래스는 자신이 담당하는....(자신의 관점)에 대해서만 기능을 구현하고 그 외의 부분들은....다른 부분에서 구현해서 통합할 수 있는... 이 정도로만 이해했습니다.. (제가 잘못 이해한거라면.... 댓글을 남겨주세요.....^^;;; 아직 잘 몰라서..ㅋ)

AOP에 대한 설명은... http://blog.naver.com/jiruchi?Redirect=Log&logNo=10030863709 이 페이지에서 잘 설명해주셨네요..^^ 참고하세요... 간단한 용어들도 정리가 되어 있어서 좋아요-.


C++에서는 AOP의 개념을 도입할 수 있는 방법이 없을까...생각을 하다 검색을 해보니..바로 나오네요..aspectC++(http://www.aspectc.org/)!!ㅋ

우선...aspectC++ 프로젝트에 대해서 간단하게 설명드리면... C++에 AOP의 개념을 더 해줄수 있는 툴입니다.


About the Project

The success of Aspect-Oriented Software Development rises and falls with user-friendly tool support. With AspectJ® ¹ the first complete and powerful language extension for AOP has been created. With the AspectC++ project we extend the AspectJ approach to C/C++. It is a set of C++ language extensions to facilitate aspect-oriented programming with C/C++. An implementation of an AspectC++ compiler is available for download from our download page.


라고 되있네요........

다운로드 받을 수 있다고 하길래...다운로드 받아서 설치했습니다...;;ㅋㅋ
바이너리형태로 배포를 해주기 때문에 따로 컴파일을 할 필요는 없구요..그냥 압축만 풀면 되네요-..ㅋ

이번 글에서는 간단한 예제 하나를 설명하도록 하겠습니다.(예제는 다운로드 받은 파일에 포함되어 있습니다^-^)
다운로드 받은 디렉토리의 examples의 Action 이라는 예제를 보겠습니다. Action이라는 디렉토리에 들어가게 되면..
Action.ah
Makefile
main.cc
이렇게 세개의 파일이 존재합니다. Action.ah에 대해서는 나중에 설명하기로 하고..
나머지는...Makefile과 main.cc .....많이들 보던 파일들이죠?ㅋㅋ

아래는 main.cc의 내용입니다.



라는 코드가 있을 때 이 코드를 g++로 컴파일 해서 실행 하면....다음과 같은 결과를 내놓게됩니다.


이 부분은 다들 이해가 되시죠? 컥- 안된다면............C++먼저 공부를..(--)(__)(--)죄송.

이제...위에서 받은 프로그램을 사용해서 다시 컴파일을 하겠습니다.. 컴파일 방법은...
g++대신 ag++을 사용하시면됩니다.. ag++ test.cc 하면.. 컴파일이 되는거죠..^-^;;
그럼..자동으로 Action.ah 파일이 포함되어 컴파일되는 것 같군요..(추측입니다..죄송;;)

이제 Action.ah 파일의 내용을 보도록 하겠습니다.


실제 파일에는 뒤에 내용이 더 있지만.... 이해를 쉽게 하기 위해서 뒷 부분은 생략했습니다^^;;

이제..ag++을 사용해서 컴파일한 결과를 보면..



입니다.. main.cc의 내용은 바뀐게 없지만..출력된 내용은 상당히 많이 바뀌었죠?..
Action.ah에 정의되어있는 데로...함수들이 호출되거나 실행되기 전에...... 정의된 내용들이 수행된 것을 볼 수 있습니다.

Action.ah에 서술(?)되어 있는 내용들은 이번에 다 설명하기는 힘들 것 같구요..(제가 아직 잘 몰라서..ㅋㅋ)
개발자 분들은....그냥 대충 읽히는데로 보시면..이해가 가실 것 같아서....다른 설명은 좀 더 공부한 뒤에 자세히 올리겠습니다.

키만 설명드리면.... tjp->proceed() 부분이...실제 우리가 실행하고자 했던 함수가 수행되는 부분입니다...
그리고 나머지 부분들은...그 함수가 수행되기 전, 후에 일괄적으로 수행되는 부분들이 되는 거구요...

이를 잘 활용하면.........(자바에서 log를 위해 많이 사용하는 것 처럼..) C++에서도 응용이 가능할 것 같네요..
함수에 들어가기 전에 parameter를 자동으로 출력하고 함수의 진입부에 대한 로그를 남기고...
함수를 수행한 뒤의 다시 입력으로 주었던 값들을 확인함으로써 함수내에서 어떤 변화가 있었는지 확인이 가능하죠.....
(예제중에 Trace라는 예제가 있는데..이 예제는 이러한 기능을 조금 가지고 있습니다.. 다음에 포스팅 하도록 하겠습니다.ㅋㅋ)

잘 활용하면 재미있는 부분들이 많을 것 같습니다...
아직 aspectC++에 대해서는 한글로 된 페이지가 거의 없길래.......사람들의 관심을 끌어보고자 엉성한 글이지만....포스팅 했습니다^-^ㅋㅋㅋ

관심있으신 분들 안계신가요?ㅋㅋㅋ

트랙백과 댓글 여닫기

TOP