언어2010. 4. 13. 16:16
COM (Component Object Model)
DCOM (Distributed Component Object Model)
COM+ (Component Object Model+)

COM은 간단히 말해서 프로그램에 사용되는 버튼이나 bar, 메뉴, table등과 같은 것도 되고, 사용자 눈에는 안보이는 fuction일 수도 있습니다.
즉, 그 자체로 특정 기능을 수행하지만, 자기 혼자서는 프로그램이 아닌것으로, 다른 곳에서도 사용이 가능한 것이죠. 예를 들면 버튼이 있는데, 이것은 A라는 프로그램에서도 사용하고, B라는 프로그램에서도 사용할 수 있습니다. 필요하면 그 버턴을 어디든 가져다 사용가능하도록 미리 만들어 두고, 그것을 버튼 컴포넌트라고 부릅니다. 버튼이나 메뉴등 자주 사용하는 것들을 윈도우즈 프로그래밍에서 미리 만들어 두고, 가져다 쓰는 것을 말합니다.(실체는 이중 포인터입니다.)

DCOM이라는 것은 Distributed 라는 분산체제, 즉, 네트웍으로 연결된 COM입니다. 이것은 다른 컴퓨터에 있는 컴포넌트를 자기 컴퓨터에서 사용할 수있도록 해놓은 것입니다.

COM+는 위에 COM/DCOM과 약간 다른 계념으로 MTS라고 불리는 일종에 서비스입니다. 쉽게 말하자면 COM을 네트웍에서 사용가능하도록 해주는 서비스로 windows2000에서부터 지원을 해주기때문에 DCOM을 구지 사용해서 프로그래밍을 하지 않아도 쉽게 네트웍상에서 COM을 가져다 사용할 수있습니다.


위 3가지는 windows가 생기면서 나온 용어들로, 객체지향 프로그래밍을 하고, 윈도우즈 프로그래밍을 하게 된다면 학습중에 최종적으로 거쳐야할 관문입니다. 자신만의 컴포넌트를 만들어서 쓰는 것은 자기만에 함수를 만들어서 쓰는 것과 같지만, 그 사용법이 조금 복잡합니다.
COM을 사용하게 되면 dll 이라는 확장자가 붙은 파일이 필요한데, 한게임같은 게임을 설치하면 거기에 사용되는 dll이 설치가 되는것을 볼 수가 있습니다. 그럼 그때, 아~ dll파일 안에 어떤 컴포넌트를 부르는 함수가 있구나 라고생각하시면 되고, 실제 컴포넌트는 한게임 서버에있는 것이라 생각하세요.


출처 :: 지식인 aoww_seegle (2003-05-16 14:48 작성)님 답변

//--------------------------------------------------------------------------------------

com 은 Component Object Model 의 약자이지만 일반적으로 컴포넌트라고 발음합니다. 정확한 해석은 아니지만 줄여서 부르는 셈이지요.

기존의 프로그램을 살펴보면 여러가지 문제점이 있었지요. 그 많은 문제점중 하나가 예를 들어 dll 의 이름 문제점을 들수 있는데요. 많이 보셨을 겁니다. ****.dll 이라고 하는 파일을요. 이는 메인 프로그램에서 다 처리하지 못하거나 특정한 모듈을 따로 처리하기 위해 만든 일종의 메인에 딸린 하부적인 실행파일이라고 볼수 있는데(일단은 dll 도 실행파일입니다. 자체 실행파일은 아닙니다만...) 이는 dll 의 이름을 가지고 접근하고 있습니다. 하지만 소프트 웨어를 만드는 회사가 많은만큼 같은 dll의 이름을 가진 실행파일들이 많아지고, 또 그것을 인스톨 하면서 윈도우 폴더에 복사하면 문제가 생기지요. 전혀 다른 회사에서 개발한 dll 이 이름만 같고 전혀 다른 기능을 하는데도 이를 모르고 덮어 쓰기 해버리면...

이를 해소하기 위한 하나의 방법이 컴포넌트 입니다. 사용해 보셨는지는 모르지만 컴포넌트는 GUID 라는 128비트의 일종의 아이디 비슷한게 있습니다. 이걸로 접근하므로 이름의 문제로 인한 충돌이 일어나지 않는 것입니다.

여기까지는 com 을 사용하는 목적중의 하나만 예를 든것이고 com 을 한마디로 정의하자면 객체 지향적 모듈개발이라고 정의하고 싶네요. 아니 이건 제가 개인적으로 내린 정의입니다. 제가 느낀 바로는요...^^ 다른 분들은 어떻게 생각하실지 모르겠습니다.

어떤 프로그램을 짤때, 예를 들어 메신져를 생각해 보겠습니다. 메신져를 짜려면 접속자 파악, 파일전송, 메시지 보내기 등의 작업들이 있습니다. 그런데 이경우 com 을 사용하지 않고 짜려면 한사람이 설계한 프로그램에 다른 사람들이 달라붙어서 거기에 맞춰가면서 프로그래밍 할 수 밖에 없습니다. 상당히 비효율적이고 또 그렇게 프로그래밍한 소스는 그 메신져에서 밖에 쓸수가 없죠. 하지만 컴포넌트화 해버리면... 쉽게 말해서 모듈별로 따로 만들어 버리면, 넌 메시지 보내는 루틴을 만들어, 난 파일 전송하는 루틴을 만들게 그리고 만들때는 com 으로 만들자. 라고 하면 쉽게 끝나는 거죠. 조립만 하면 되기 때문이죠.

여기까지 말씀을 드리면 그렇다면 com 은 일정한 형식을 가지고 있어야 한다. 왜냐하면 조립을 하려면 표준형식이 있어야 하기 때문이다. 라고 생각하시는 분이 계실지 모릅니다. 네 맞습니다. 일정한 형식을 맞춰서 프로그램을 짜야 합니다. 그래서 com 을 하시는분들 보면 머리붙잡고 쥐어 뜯습니다.(으아..미쵸미쵸 하면서요...^^ 저도 그런 기억이 있죠) com 의 표준형식을 공부하는게 쉬운게 아니거든요. 그리고 객체지향적 설계가 필요합니다. 그래서 com 에 관해서는 바이블도 따로 나와 있습니다. 공부하시려면 com 은 바이블을 꼭 사셔야 합니다. 아니 꼭은 아니더라도 사시는게 좋습니다. 인터넷으로 공부하려고 하시면... 한계가 보일겁니다.

이외에 책에 적어진 com 의 장점을 적어보겠습니다. 이하는 책에 적혀있는 내용입니다.

1. 이식성이 강하다 : 새로운 프로그램에 대한 강력한 이식성은 개발기간을 단축시킨다.
2. 유연성이 있다 : 컴으로 작업한 소프트웨어를 업그레이드 하고자 할 경우 단순히 업그레이드된 컴포턴트만 복사하면 되고 업그레이드 되지 않은 컴포넌트를 사용하지 않은 경우에도 잘 수행된다.
3. 재 컴파일할 필요가 없다.
4. 객체지향 개발 방법론(com) 은 프로그램의 구현방법을 획기적으로 바꾸었다.
5. com 의 경우 플랫폼에 독립적이다.
Posted by 동동(이재동)