COM은 뭔가요?

gurugio의 이미지

[관리자 글을 분리하였습니다. http//bbs.kldp.org/viewtopic.php?t=27356 ]

예전에 어느 세미나에서요

콤포넌트라는 개념에 대해서 이야기를 들으면서

레고 블록처럼 이미 잘 만들어진 작은 모듈들을

조립해서 새로운 제품을 만드는 개념을 들었습니다.

실제로 그런 방법이 쓰여지고 있지는 않겠지만

그런 개념이 있기는 한건가요?

용쟁호투의 이미지

요즘말하는 CBD가 컴포넌트기반 객체지향 개발 방법론(?)이 아닌가요?

(하나라도 제대로 아는게 없으니....)

항.상.행.복.하.세.요

meteors의 이미지

gurugio wrote:
예전에 어느 세미나에서요

콤포넌트라는 개념에 대해서 이야기를 들으면서

레고 블록처럼 이미 잘 만들어진 작은 모듈들을

조립해서 새로운 제품을 만드는 개념을 들었습니다.

실제로 그런 방법이 쓰여지고 있지는 않겠지만

그런 개념이 있기는 한건가요?

개념은 있습니다. 당연히 실제로 쓰기는 어렵죠.

이미 잘 만들어진 작은 모듈이 거의 없거든요. :)

언어별로도 다르고 환경별로도 다르고 웹 서비스를 쓰자니 느리고

한국 회사는 모듈 만들시간도 아예 없습니다. 제작 시간이 몇배로 걸리니까요. 다음 프로젝트에서는 빨라지겠지만 그거야 자신이 알 바 아니고..

meteors의 이미지

용쟁호투 wrote:
요즘말하는 CBD가 컴포넌트기반 객체지향 개발 방법론(?)이 아닌가요?

CBD는 컴포넌트 기반 개발 방법론입니다. 객체지향은 들어가지 않습니다.

컴포넌트는 객체지향의 상속은 포함하지 않습니다.

컴포넌트는 객체지향 언어로 안 만들어도 됩니다. 대표적인 것이 VB였죠.
물론 객체지향 언어로 만드는게 더 쉽죠.

용쟁호투의 이미지

meteors wrote:

CBD는 컴포넌트 기반 개발 방법론입니다. 객체지향은 들어가지 않습니다.

컴포넌트는 객체지향의 상속은 포함하지 않습니다.

컴포넌트는 객체지향 언어로 안 만들어도 됩니다. 대표적인 것이 VB였죠.
물론 객체지향 언어로 만드는게 더 쉽죠.

아! 감사합니다! 이렇게 또 한가지를 얻어갑니다! :D

항.상.행.복.하.세.요

kuma의 이미지

Code 를 재탕해서 써먹을 수가 거의 없는것 같군요.

그래서 그나마 가능한것은 Library 형태로 굳혀서 다음 프로젝트에 적용을 하긴 하지만 실제 그 양은 프로젝트의 0.2% 도 되지 않는것 같습니다.

gurugio의 이미지

언어가 다른 콤포넌트라 해도 어짜피 기계어로 이뤄진 것이니까요

인터페이스는 어셈블리 언어로 만들면 되지 않을까요?

그래서 씨에서 라이브러리들을 사용하는 것처럼

자신의 업무 분야에서 자주 쓰이는 기능들을 작게 만들어놓고

인터페이스만 잘 구축하면 가능성이 있을것 같습니다.

제가 지금 작업하는 곳에서도요 씨나 어셈블리로 모듈을 만들어서요

가상 함수로 인터페이스를 만들어서 사용하고 있거든요.

또 어셈블리 언어로 라이브러리를 다양하게 만들어놓고

계속 업그레이드하면서 업무에 사용하시는 분도 알고 있습니다.

콜링 컨벤션만 주의하면 충분히 활용될 수 있는 방법 같습니다.

언어와 운영체제에 독립적인 모듈들이 구성될것 같은데요.

... 귀차니즘만 극복한다면... lol

meteors의 이미지

gurugio wrote:
언어가 다른 콤포넌트라 해도 어짜피 기계어로 이뤄진 것이니까요

인터페이스는 어셈블리 언어로 만들면 되지 않을까요?

그래서 씨에서 라이브러리들을 사용하는 것처럼

자신의 업무 분야에서 자주 쓰이는 기능들을 작게 만들어놓고

인터페이스만 잘 구축하면 가능성이 있을것 같습니다.

제가 지금 작업하는 곳에서도요 씨나 어셈블리로 모듈을 만들어서요

가상 함수로 인터페이스를 만들어서 사용하고 있거든요.

또 어셈블리 언어로 라이브러리를 다양하게 만들어놓고

계속 업그레이드하면서 업무에 사용하시는 분도 알고 있습니다.

콜링 컨벤션만 주의하면 충분히 활용될 수 있는 방법 같습니다.

언어와 운영체제에 독립적인 모듈들이 구성될것 같은데요.

... 귀차니즘만 극복한다면... :lol:

어셈블리 언어로 만든다면 (Java Machine code 제외) CPU에 종속적이게 됩니다.

인텔에서는 64bit CPU를 기존 CPU와 호환이 되지 않도록 내 놓았습니다. 이런 경우 10년쯤 뒤에는 엄청나게 느린(10년 뒤에 봤을 때) 고물 컴퓨터를 단지 32bit 코드라는 것 때문에 사용할 수 밖에 없게 됩니다.

그래서 MS에서도 .NET 환경을 결국 만들어냈지요.. Windows만 다른 CPU에서 동작하게 만들면 .NET 환경에서 돌아가는 프로그램도 돌아가니까요.

onemind555의 이미지

놈담 이구요..

MS에서 만들어낸 기술로서.. 앞에서 말한 사람둘 내용 그대로 입니다...

기술이 좋아 보인다고 좋아 할 필요가 없어요..
Component 조합 해서 구닥 다리 로 프로그램 만드는 사람들은 별로 대우를 못 받습니다. 인정도 안 해 주고요...

-----------^^ ^^ ^^ ^^ ^^ ----------
..........................................................

nachnine의 이미지

한문장으로 하면

컴포넌트간 상호작용을 위한 바이너리 표준입니다.

( 프로그램 자체를 말하는것이 아니죠 ^^ )

Unix , Apple Macintosish , Windows에서 다 돌아갑니다.

( OS - independent )

이 표준만 따르게 되면 어느 OS 건 다 돌아가겠죠...

p.s. 공부하고 있는데 너무 어려워요.

sDH8988L의 이미지

처음에 질문을 올리신 분은 'COM'이 뭐냐... 라는 질문을 하셨는데, 진행은 Component 일반에 대해서 하고 있는거 같네요...

COM은 MS에서 내놓은 Component Model 아니었던가요???

그래서 보통 DataBase Program 같은 거 할 때, Server Side에 COM Component를 만들어 두고 호출하는 방식으로 Coding을 한 적이 있습니다...

MTS를 사용해 보신 분들은 전부 아시는 방법일 거 라고 봅니다...

물론, MTS는 COM의 Pool 역할을 해서 Load Balancing과 같은 MiddleWare 역할을 하게 되지요...

당연히 COM은 Component이기 때문에 여러 개를 조합해서 더 막강한 기능을 만들어 낼 수 있습니다... 물론, 이런 식으로 많이 쓰고 있고요...

제가 DataBase 관련 MiddleWare Programming 밖에 해보지 않아서 전체 COM의 개념에 대해서는 잘 모릅니다만, MTS에서 사용할 때는 그렇게 했다는 거죠...

이런 거는 데브피아에 가면, 엄청난 자료들이 쌓여 있을 텐데요...
거기는 MS Tool들에 대한 전문가들이 많이 있습니다...

그 쪽에 가서 COM이 뭐냐고 질문하시는 것이 정답일 거 같습니다...

gurugio의 이미지

엇.. 제 질문이 왜 분리됬는지 모르겠네요..

제 원래 의도는 과연 한번 만들어놓은 모듈이 제대로 그리고 오랫동안

재사용될 수 있는가 하는 방법중에 COM이라는게 혹시 있지 않는가 였습니다.

음... 객체지향에서 재사용성이라는 말이 있지 않았나요?

전 객체지향을 전혀 몰라서요... oops

여하튼 어떤 언어로 만든 라이브러리든지 사용될 수 있으려면

인터페이스를 어셈블리로 적용하면 되지 않을까 하는 말씀도 올렸지요.

사실 크로스 어셈블러가 있으니 운영체제에도 독립적이고

32비트 환경에서는 당분간 사용될 수 있으려니 해서였습니다..

doomsday의 이미지

gurugio wrote:
엇.. 제 질문이 왜 분리됬는지 모르겠네요..

제 원래 의도는 과연 한번 만들어놓은 모듈이 제대로 그리고 오랫동안

재사용될 수 있는가 하는 방법중에 COM이라는게 혹시 있지 않는가 였습니다.

음... 객체지향에서 재사용성이라는 말이 있지 않았나요?

전 객체지향을 전혀 몰라서요... :oops:

여하튼 어떤 언어로 만든 라이브러리든지 사용될 수 있으려면

인터페이스를 어셈블리로 적용하면 되지 않을까 하는 말씀도 올렸지요.

사실 크로스 어셈블러가 있으니 운영체제에도 독립적이고

32비트 환경에서는 당분간 사용될 수 있으려니 해서였습니다..

오랫동안 재사용되는 COM 컴포넌트 중 가장 유명한 것이 MFC입니다. -_-a

gurugio의 이미지

전..COM에 대해서 여쭤본게 아니라요

조립이라고 해야할지 그런 방식으로 코드가 재사용되는 경우를 여쭤본건데..

어허헛... oops

nachnine의 이미지

일반적으로 COM이라고 이야기하면

Component Object Model이라고 해서 MS에서 만든 개념입니다.

그리고 제목이 COM 이라고 되어있지만

말씀하시려하는것은 ' 컴포넌트' 에 대한 이야기구요..


COM 컴포넌트 란 말도 이상하군요...

그리고 MFC는 COM 이 아닙니다.

COM관련 코드가 대량으로 들어있긴 합니다만 ,

그 자체가 COM은 아니죠.

C++로 작성된 라이브러리(? 클래스) 일뿐입니다.

fender의 이미지

음... 조금 오해의 소지가 있는 글들이 많군요. 어느 분께서 답변하신 것처럼 CBD와 객체지향 방법론은 다른 것입니다. (배타적이라기 보다 상호 보완적이라고 생각합니다만...)

그리고 코드의 재사용은 생산성을 위해 필수적입니다. 재사용의 방식에는 여러가지가 있습니다. 넓은 의미로는 다른 코드를 붙여 넣는 것도 재사용이라고 하지만, 좁은 의미로 생각해도 컴포넌트 재사용, 라이브러리나 객체지향적인 재사용 등등 역시 거의 상식으로 생각되고 있습니다.

재사용이 많이 사용되지 않는다고 말씀하신 분들도 있지만, 이는 국내 IT 개발이 비정상적으로 적은비용/시간에 주먹구구식으로 이루어지는 경우가 많기 때문입니다. 그리고 그런 식으로 개발된 프로그램의 질은 떨어질 수밖에 없습니다.

저도 MS 기반 프로그래밍을 많이 해보진 않았지만, COM, COM+, DCOM 등등이 매킨토시나 유닉스 등에서 동작한다는 말은 처음 듣네요... 혹시 이 부분에 대한 자세한 내용이 있으면 알려주시면 감사하겠습니다.

어쨌든 MS는 이런 COM 관련 기술들로부터 .NET으로 전환하고 있는데, 이 경우는 이론적으로 플랫폼, 언어 독립적이라고 합니다. 하지만 실제적으로는 MS윈도우즈 이외의 환경에서 돌아가는 공인된 런타임은 커녕 제대로된 써드파티 벤더도 아직 없습니다. 모노가 성공하면 문제가 달라지겠지만 개인적인 생각으로는 이 점은 매우 비관적으로 봅니다. (이 부분에 대해선 원하신다면 별도로 토론 주제를 뽑아도 좋을 것 같군요)

마지막으로 말씀하신대로 '어셈블리로 인터페이스를 한다'는 건 아직 컴포넌트나 인터페이스의 개념을 잘 모르셔서 하시는 말씀 같네요 :) 물론 객체지향에서의 재사용과는 달리 컴포넌트 기반 재사용은 보다 느슨하게 결합된 바이너리 수준의 연동을 지원하는게 기본입니다만, 어디까지나 잘 정의된 인터페이스 규약에 의한 호출을 이야기하는 것입니다.

예를들어 웹브라우저와 스타크래프트가 모두 최종 바이너리 결과물이 어셈블리로 변환 가능한 기계어라고 해서 웹브라우저로 질럿 컨트롤 할 수 있는 건 아니잖아요 :)

컴포넌트 기반 방법론은 언어를 공부하시다 보면 자연스럽게 배우게 됩니다. 그냥 막연하게 이럴 것이다 생각해 보는 것보다는 나중에 언어나 플랫폼을 공부하시다가 해당 환경에 적합한 컴포넌트 모델 - .NET, Bonobo, JavaBeans, EJB 등등을 접하시게 되면 그 때 구체적인 스펙을 공부하시는게 훨씬 도움이 됩니다.

참고로 MS 기반 개발쪽을 생각하신다면 COM보단 .NET을 보시라고 권해드리고 싶습니다.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

doomsday의 이미지

nachnine wrote:
일반적으로 COM이라고 이야기하면

Component Object Model이라고 해서 MS에서 만든 개념입니다.

그리고 제목이 COM 이라고 되어있지만

말씀하시려하는것은 ' 컴포넌트' 에 대한 이야기구요..


COM 컴포넌트 란 말도 이상하군요...

그리고 MFC는 COM 이 아닙니다.

COM관련 코드가 대량으로 들어있긴 합니다만 ,

그 자체가 COM은 아니죠.

C++로 작성된 라이브러리(? 클래스) 일뿐입니다.

COM 컴포넌트 == COM을 사용한 컴포넌트라는 뜻으로 썼습니다 마땅한 단어가 없어서...

그리고 MFC를 자세히 보면... 결국 COM 기술을 사용하기쉽도록 C++로 정의 해 놓은것에 불과합니다.

-------수정--

글 적고 나서 다시 생각하니, 저랑 같은 생각을 다르게 말하고 있는 것 같다는 생각이 드는군요.

MFC != COM이긴 하지만... MFC - COM 하면 C++스타일의 껍데기만 남는거기도 하지요.

nachnine의 이미지

네 맞아요

같은 이야기를 다르게 하고 있는거죠 ^^

COM은 - 소스 코드나 , 바이너리.. 그런 자체를 말하는것이 아닙니다.

말씀하신 것처럼 '규약(? 모델)' 이죠.