반응형

3장에서 COM에 대해서 아주 대략적이지만 중요한 것만 했다.


COM의 개념을 설명하기에는 부족하지만, 반드시 알아야 하는 것들만을 썼다구 생각한다.


쓰는사람이 귀잖음이 강하여 소스코드를 작성하지 않는 관계루..


또한, COM의 중요한 개념만을 설명하고 넘어갈것이라는 처음의 의도대루 나름대루 충실한 3장이


었다고 생각된다.(내 생각으로는 나중에 ATL을 사용하여 COM을 작성할것이기때문에 COM의

그정도의 개념이면, COM의 설계와 구현에 문제가 없어보인다.)


이번엔 IDL이다.


이번 포스트에는 IDL의 배경과 그녀석이 뭔지에대한 역시 개념에 대한 설명이다.


중요한  IDL의 문법은 다음장에서 쓸까한다.


IDL은 Interface Definition Language의 약자이다.


말그대로 인터페이스에 대한 정의를 기술하는 언어이다.


COM은 Binary로 되어있고, 그 COM의 서비스를 이용하는 것은 인터페이스와 인터페이스에 묶인 함수들을 통해 이루어진다고 이미 설명한바 있다.


IDL은 그 인터페이스와 함수들을 정의하는 언어인 것이다.


잠깐 배경을 설명하자면, COM외에도 현재 사용되고 있는 Component기반의 기술들은 많다. OMG그룹의 CORBA가 대표적이며, 분산 Component비스므레한 것들까지 포함하면, 샌프란시스코 프레임웍이던가 이런것두 있구 자바쪽의 RMI도 이와 비슷한 기술이고.....


뭐 어찌되었던 간에 현재 가장 많이 쓰이는 분산처리 기술인 DCOM과 CORBA를 놓고 보면 둘다

이 IDL을 사용한다. 문법은 다를지 모르지만, 인터페이스를 정의하기 위한 무언가가 필요하다는 얘기다.


이유는 잘 생각해보면 IDL이라는 걸 쓸수 밖에 없게 된다. COM의 강점중 하나는 언어독립적이란 것이다. 지가 잘나봤자 바이너리에 불과한 COM의 서비스를 이용하려면 내가 사용하고자 하는 서비스가 담긴 코드의 위치를 얻어야 하는데, 그것이 언어에 따라 다르다. 어짜피 인터페이스와 함수를 정의하는 마당에 그게 C루 되어있으면? 다른 언어는 어떻게 쓰냐. 헤더를 제공하는 MFC확장 DLL을 봐라. 다른 언어에서는 못쓴다. 일반 DLL? 걔들은 뭐 진입점 정보를 가지고는 있지만, Object나 Component레벨의 무언가는 넣을수가 없다. 그래서, 모든 언어를 아우르는 언어가 필요한데, 그게 바로 IDL이다.


MS는 이 IDL을 컴파일하여 C코드를 생성하는 MIDL을 제공하며, 다른 언어에서도 IDL자체를 작성하지 않더라도 비슷한 형식을 가지는 여러가지 형식을 제공한다. IDL작성으로 인해 인터페이스와 함수들은 COM객체안에 녹아들게 되고, 이를 사용하는 언어들은 COM객체에 녹아있는 IDL을 이용하여 COM의 서비스를 이용하게 된다. 물론 그 IDL을 자신의 언어에 맞도록 변화시켜서 말이다.

반응형

+ Recent posts