반응형

MS의 주된 기술과 앞으로 나올 새로운 신 기술들은 일단 MS에서 내세우는 COM을 기반으로 하고 있다는 것은 이미 이야기한바 있다.


내 경우에 그런 기술들중에 자주 사용하거나 사용해본 기술은 다음과 같은 것들이고, 다른 개발자들도 한번쯤 사용해보았을 만한 기술들이다.


ADO - COM기반의 DB관련 기술

MSXML - XMLParsing을 위한 (DOM과 SAX제공-지금 버전에서는 더한것두 지원할걸루 알구 있다.) COM기반 기술

DirectX - 멀티미디어를 위한 COM기반 기술.


뭐 그외에도 써보진 않았지만 XML진영과 함께 내세우는 SOAP(SImple Object Access Protocol)이라던가 하는 것들도 모두 이런 COM기반이다.


이번에 이야기 하고자 하는건 이중에서 DirectX이다. 게임하는 사람들이 가장 많이 쓰는 라이브러리 중 하나인 DirectX는 분명히 COM기반의 기술이며, 따라서 DIrectX안의 객체들은 모두 동일한 방법으로 액세스 되어야 한다.


그러나....!!


분명히 DirectX시리즈중 하나인 DirectDraw를 보자(DirectDraw는 가장 기본이기때문에....) 7.0버전 기준으로 IDirectDraw7인터페이스를 가져오기 위해서 원래는 CocreateInstance같은 함수를 통해 인터페이스를 얻어와야 한다.


또다시 그러나...!!


기억하는가...


얼토당토하지 않은 DirectCreateEx라는 함수를 제공하고 있다.이건 아무래두 MS의 고민이 아닌가 싶다. MS에서는 COM으로 DirectX의 개발을 해 내었지만, 아무래두 CoCreateInstance를 사용하기 위해서는 그리고 그 후의 인터페이스를 관리하기 위해서는 COM기술을 개발자가 이해하고 있어야 한다. MS에서는 COM의 기술적인 난이도가 어느정도 있다고 생각한듯하다. 후에 COM+등을 내놓아 어떻게든 COM의 기술적인 난이도를 줄여주기 위한 노력을 한것도 같은 맥락일 것이다. 어찌되었던 간에 DirectX를 사용하는 개발자는 이전과 같은 방식의 함수호출방식으로 DirectX를 사용한다. 그외의 여러가지 인터페이스 IDirectDrawSurface7과 같은 애들도 전부다 ddraw안에 typedef를 붙임으로 인해서 COM에 대한 지식이 없어도... 또한 COM을 사용하는 것 같지 않도록 만들어 놓았다.


하지만.... 이부분에 있어서 DirectX의 사용자에게는 위치독립성을 제공하지만 개발자에게는 위치독립성을 없애는 결과를 초래하여 COM의 특성중 한가지에 상처를 입히게 된다. 개발당시에 ddraw.lib등을 첨가하는 것이 그런것인데.... 이는 COM을 사용하기위해 개발자에게 편의를 제공한 DirectCreateEx와 같은 함수를 일반 DLL의 함수처럼 편입을 시켰기때문이다.


어떤의미에서는 COM자체에 대한 충실보다는 DIrectX를 사용하는 개발자의 편리함등을 고려한 더 많은 고민을 한 완성도 높은 API인 DirectX이지만, COM기술의 한계와 단점을 보여준 실례이기도 하다. 사실 다른 기술에 비해 너무 높은 난이도는 분명한 COM기술의 한계와 단점이라고 할수 있을것이다.

반응형

+ Recent posts