C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[15854] Re:Visual C++과 Builder C++의 차이점은?....제발요...ㅜㅜ
모라 [goodlsw] 2121 읽음    2002-02-27 10:39
제 글이 아니고 이 게시판에 있던 이경석님의 글입니다.
한번 읽어 보면 도움 되겠네요.

-------------------------------------------------------------------------------------
우선 윈도우의 개발환경의 역사를 생각해 봐야 겠네요.

도스와 다르게 윈도우 프로그램 이란건 어차피 윈도우 운영체제에서 제공되는
API 를 통해서 운영체제와 커뮤니케이션을 이루는 거지요.
그래서 초창기 윈도우 프로그램 개발 당시에는 C++ DOS 컴파일러에 윈도우의 SDK 를 다운받아
무작정 API 로 제어 하는 형태의 프로그램으로 개발도 했지요.

그때는 화면에 폼하나 나타내고, 폼위에 버튼 하나 올려진 프로그램 짤려고 해도 무지 막지한 코딩양과
노력이 필요 했지요.

그러나 API 를 하나 하나 써서 개발하는 방식에는 한계가 있고, 언어는 객체지향이라는 C++ 을
사용하지만, 진정 필요한 개발방식 자체는 객체지향 체계와는 동떨어진 형태가 되어있죠.

짜잔, 이때 새로운 객체 프레임웍 형태의 방향이 이룩되었으니, Borland C++ for Windows,
Microsoft Visual C++ 이었습니다.

윈도우 어플리케이션을 작성하면서, 자주 사용되는 작업에 대해서 객체(클래스)화 해서 이제는
맨날 길고도 긴 코드 방식과 난잡한 코드 작업에서 해방이 되었다고나 할까?

이러한 클래스들의 사용법을 익히고 사용만 잘하면 훌륭한 윈도우 프로그래머가 되는거죠.
그러한 클래스들의 집합을 VC++ 에서는 MFC 이고, BC++ 에서는 OWL 이라 명명되었으니~~

두가지 방식은 각자의 업체가 나름대로의 클래스들을 잘 구성해놓고 자신들의 개발방식 프레임웍에
맞춰서 개발 하면 되는 것이 였죠.
그래서 이때는 VC++ 이나 BC++ 이나 개발하는 방식이 비슷했습니다.

DOS 시절에는 BC++ 이나 터보 C++ 등의 볼랜드 제품이 가장 많이 쓰였는데, 윈도우로 가면서 MS의
공룡 발차기 작전에 볼랜드가 많이 떨어저 나갔죠.

그럼 이제부터 VC++ 과 BCB(Borland C++ Builder 의 약자, BC++ 과 다름니다.) 의 한판승부를
겨뤄 보도록 하죠.
우선 VC++은 위에서 이야기 한것과 같이 오래전 부터 사용 되어져 왔는데에 비해 개발방식의
프레임웤 또한 지금의 현대적 개발 방식과는 점점 동떨어져 버렸습니다.
차라리 VB 가 현대적 개발 방식이죠.(그러나 아시다 시피 여러모로 단점이 많죠.)
그렇다고 VC++ 의 개발 프레임웤을 지금의 개발방식인 RAD 형태로 뒤엎어 버릴수는 없는거였죠.
말이 좋아 Visual 이란 말을 붙였지..

여담이지만 요즈음 MS 에서 Visual Studio .Net 7.0 을 맨날 선전하면서 그러더라구요.
드디어 이제서야 C++ 이란 요소의 강력한 언어를 생상성이 강력한 RAD 환경을 갖춘 형태와 접목된
복합적인 개발환경이 탄생했다고....(Delphi 나 BCB 가 그러한 개발환경을 벌써 도입된게
언제인데 지금에서야 자랑하고 다니니. 쯧쯧.)
아! 그리고 VS.NET 설계나 C#의 설계자들이 모두 볼랜드의 Delphi 설계팀들이 었다는거 아시죠.
그래서 VS.NET 이나 C# 언어 스펙을 보면 볼랜드의 냄새가 많이 나죠. 역시 돈많은 공룡은 달라...

하여간 볼랜드는 BC++(아직 존재 합니다.)의 제품은 그대로 유지 하면서 Delphi 의 VCL 이라는 컴포넌트
개발 방식을 그대로 이용한 새로운 BCB란 제품을 내놓게 되었습니다.

우선 언어 차원에서 보면, 우리가 이러한 개발툴을 이용하더라도 먼저 다덜 C++을 공부 합니다.
죽어라 공부 했다 합시다. 그래서 C++ 이라는 언어는 어느정도 마스터 했다고 합시다.
그런데 VC++ 을 하다보면 고생해서 배운 C++ 이 무색해져 버립니다.
대충 간단한 샘플을 만들어 보고 소스의 처음 부터 아래 까지 죽 읽으면서 이해 하려고 해보십시요.
내가 제대로 C++ 배운것인가 하는 도탄에 빠집니다.
이해 하기 난해한 코드들 뿐 입니다. 지금 저는 오늘도 VC++ 로 개발은 하고 있지만서도 아직도
이해하지 못하고 그냥 무작정 그때는 그렇게 쓰는 건가보지 하면서 무조건 쓰는 코드들이 많습니다.

하지만 BCB 로 간단한 샘플을 만들어 보십시요.
그리고 전체 소스를 열어 보고 위에서 부터 쭉 읽고 이해 하려고 해보십시요.
C++ 을 공부 했다면 읽어가면서 대강이라도 내용의 흐름이 이해할수 있는 수준입니다.

그리고 VC++ 을 공부하려는 노력의 1/5, 크게는 1/10 정도의 노력만으로도 BCB의 개발 방식을 익히실수
있을 것입니다.

그럼 생산성이란 측면에서 볼까요 당근 BCB가 압도적이죠.
VC++ 으로 이쁜 화면 구성하기란 무지 많은 노력이 필요하죠.
BCB를 진정한 RAD툴이기에 폼에 작업하는 화면이 곧 실행시의 화면과 같죠.
또한 컴포넌트 형태의 개발 방식이기 때문에 잘 구성된 컴포넌트를 잘 쓸줄만 하면 되는
사용의 개념 이라 사용하는 객체에 대해서 재구성을 하는등의 작업이 업죠.
그런데 VC++은 어떠한 객체(클래스)를 사용하기 위해서는 상속 받아서 상속 받은 클래스를 이것
저것( 여러가지 오버라이딩도 해야 되고 등등..) 구성을 해주어야 하는 방식이죠.
만약 이벤트 처리를 한다면 BCB 에서는 프로퍼티 개념 방식으로 객체에 이벤트 함수를
연결만 해주면 되거든요.

여기서 한가지 집고 넘어가야 할게 있네요.
VC++ 사용자들의 오해 한가지 있는데, RAD 환경등 편리한 환경의 개발방식은 개발툴이 감춰줘서
하는 일이 많기 때문에 세밀한 부분의 제어나 하드코딩등을 할수 었다고들 말하곤 하죠.
그러나 그건 BCB를 제대로 모르고 하는 천만의 말씀이요, 섭섭한 말씀입니다요.
BCB는 절대 VB나 파워빌더등의 특정한 툴에 집착된 개발환경이 아닙니다.

BCB도 위에서 말한 사용의 개념을 떠나 객체를 상속받아 다양한 재구성과 세밀한 하드코딩이
가능 합니다.
하여간 RAD 환경의 편리한 점은 직접 개발 하면 더욱더 늘낄수 있으니, 직접 해보시고요.

그러면 여기서 가장 중요한 객체의 구성의 관점에서 바라 볼까요.
저는 아직 까지도 VC++ 책들을 보면 "강력한 MFC" 이러한 문구가 꼭 들어가 있는게 이해가 안됩니다.
뭣이 강력하다는 건지. BCB 의 VCL 구조와 비교 해보면 MFC는 조금 만들다가만 어설픈 객체처럼
느껴지기 까지 합니다.

예를 들어 우리가 평생 살면서 무엇을 적을때 볼펜(객체) 쓰지요.
지겹도록 많이 그리고 흔히 쓰는 도구이죠.
그럼 당연히 우리는 볼펜을 쓰기 위해서는 볼펜 뚜껑을 열고 그 볼펜(객체)으로, 노트에 열심히
사용하기만 하면 됩니다.
늘상 쓰는 볼펜의 기본 기능은 뻔한데, MFC는 볼펜뚜컹, 볼펜케이스, 볼펜심, 볼펜잉크, 볼펜구슬 이런
식으로 까지만 만들어져 있습니다.
늘쌍 쓰는 볼펜(객체)인데도 불구 하고, 우리는 이런 볼펜부속품들을 직접 조립하고 만들고 나서야
노트에 필기를 할수 있는 거죠.
그래서 VC++ 우선 RAD의 개발환경에서 생산성이 떨어지고, 객체 구성방식에서 부터 생산성이 떨어지므로
전체적인 개발 속도도 느려 집니다.

자, 그럼 VC++ 사용자는 또 이러한 이야기를 할겁니다.
BCB로 볼펜(객체)을 사용하면, 자기가 색다른 볼펜을 만들고 싶은데 다 만들어진 볼펜(객체)으로는
자신이 색다르게 구성하고 싶은 볼펜을 못만들지 않느냐?
그러나 VC++은 볼펜들의 구성요소만을 제공 해줌으로써 다양한 볼펜을 만들수 있지 않는냐?
이런 질문을 하겠죠.(실지로 주변으로 부터 많이 질문해오는 것중의 하나 입니다.)

하지만 예를 한번 보여 드리죠.
실질적으로 메모장 처럼 글씨를 쓰는 간단한 윈도우 프로그램을 작업한다고 할때 봅시다.
VC++ 은 객체 CEdit 를 쓰겠죠.
CObject -> CWnd -> CEdit 이런 상속 형태겠죠.

그럼 BCB는 TMemo 라는 객체를 쓰는데
TObject -> TPersistent -> TComponent -> TControl ->
TWinControl -> TCustomEdit -> TCustomMemo -> TMemo 이런 상속 형태를 가지죠.
그리고 Memo에 들어갈 문자들을 제어 하기 위해 TMemo 에는 스트링들의 배열 형태를 같는 TStrings
객체가 포함 되어 있죠. 이 TStrings 객체는 또한
TObject -> TPersistent -> TStrings 와 같은 상속 형태를 가지고요.
하여간, 이런식으로 일반적으로 사용하는 기능에 대해 하나의 완변한 객체로 만들고 이 객체는
여러가지 필요로 하는 객체들이 모여서 구성이 되어 집니다.
그리고 이 구성된 객체들은 프로퍼티를 통해서 접근하게 됩니다.

그럼 이 멀티라인 에디터창에 10라인의 문자 들이 있고 3번째 라인 다음에 다른 문자들을 추가 하고
싶다고 할때 아래의 예를 통해서 보죠.

== BCB는 아래와 같겠죠. ===============================================
Memo1->Lines->Insert(3, "중간에 추가 합니다.");

참고) Lines는 TStrings 객체 입니다.


== VC++ 에서는 아래와 같겠죠. (꼭 이방식은 아님) ==========================
     CString sTest;
     CStringArray saTest;
     int nST = 0, nED = 0;

     m_Edit1.GetWindowText(sTest);
     sTest = sTest + "\r\n";
     
     while (true) {
           nED = sTest.Find("\r\n", nST);
           if (nED == -1)
                 break;

           saTest.Add(sTest.Mid(nST, nED - nST));
           nST = nED + 2;
     }

     saTest.InsertAt(3, "중간에 추가 합니다.");

     sTest = "";
     for (int i = 0; i < saTest.GetSize(); i++) {
           sTest = sTest + saTest.GetAt(i) + "\r\n";
     }

     m_Edit1.SetWindowText(sTest);

자 우리는 늘상 필요로 하는 기능을 힘들게 구현 할것이냐? 라는 질문을 왜 하는지 알겠죠.
그리고 나는 TMemo 처럼 완벽한 객체보다는 CEdit 처럼 기능이 많이 빠진 부분에다가 나만의 기능들을
넣어서 만들고 싶다할경우는 CEdit에 대응하는 TCustomEdit 클래스나 TCustomMemo 클래스에서 상속받아
기능들을 부여 하면 되겠죠.

또한 볼펜 내부의 객체를 건드리는 작업을 한다고 봅시다.
나의볼펜(객체) 하나 만들어서 볼펜을 0.7m 빨강색 으로 하고 싶을때를 보겠습니다.

== BCB는 아래와 같겠죠. ===============================================
나의볼펜->볼펜잉크->색상 = 빨강;
나의볼펜->볼펜구슬->싸이즈 = 0.7;
나의볼펜->노트에쓰기();

== VC++ 에서는 아래와 같겠죠. ==========================================
볼펜잉크* 나의볼펜잉크 = 나의볼펜->Get볼펜잉크();
색상* 나의볼펜색상 = 나의볼펜잉크->Get볼펜색상();
나의볼펜색상->Set색상바꾸기(빨강);

볼펜구슬* 나의볼펜구슬 = 나의볼펜->Get볼펜구슬();
싸이즈* 나의볼펜싸이즈 = 나의볼펜구슬->Get볼펜싸이즈();
나의볼펜싸이즈->Set싸이즈바꾸기(0.7);

나의볼펜->노트에쓰기();
===================================================================
위의 예제는 꼭 이런 방법으로 이루어지는 것은 아니지만 BCB의 특징을 표현하기 위한 단적인 예 입니다.
위에서 보듯이 BCB는 각 객체들이 모여 하나의 객체로 이루어 지고 우리는 이 최종적인 나의볼펜 을 잘
사용하기만 하면 되는 것입니다. (하부의 객체는 프로퍼티를 통해서 접근하지요.)
그러나 VC++ 예제에서는 나의볼펜을 만들어 쓰더라도 각각의 하부 객체를 일일이 따로 선언하여 접근하게
됩니다.

이러한 프로퍼티 방식은 표준적인 C++ 의 방식은 아니지만, 컴포넌트화 의 개념을 이끌어 나가는 중요한
BCB의 프레임워크 이며, 지금의 추세인 현대적인 개발 방식의 한가지 입니다.

이해가 될른지는 모르겠네요...


그리고 BCB는 컴포넌트 개발 방식이라 다양한 제3의 컴포넌트들을 개발하기 쉬울 뿐만 아니라, 여기저기
무지 많은 다양한 컴포넌트가 쫙 널려 있죠.
그것도 거의 소스가 공개되어 있는것이 많고요.
(화면 구성에 관한 컴포넌트부터 네트워크에 관련된것등등..)

또한 BCB 아니, 볼랜드의 장점은 MS 기술에만 종속적이지 않다는 것입니다.
그리고 새로운 기술을 빨리 적용한다는 것입니다.
새로운 기술(COM, DCOM, COM+, AcitivX, WebService, SOAP)은 MS에서 만들지라도 직접 쉽고 빠르고
실무에 적용하는것은 볼랜드를 따라갈자가 없죠.

하여간, 질문에 대한 답변으로 이렇게 길게 적어 보기는 처음이네요.
BCB의 많은 사용자가 늘기 위해서 시간내서 이렇게 글을 씁니다.

참고)
저도 많이 모자라는 사람 이라서 내용중 틀리거나 독단에 빠져쓴 내용이 있다면 용서하세요.
특히 VC++ 을 사랑하시는 분들 이글 읽고 이놈이 VC++ 을 뭘로 보고 이따위 글을 쓰는거야 하시는분들
도 용서 하세요.
원래 자기가 좋아하는거 설명할때는 상대방꺼 깔아 뭉개는 현상은 어쩔수 없나 봐요....^^
그러나 제가 말안해도 VC++ 도 최고의 개발도구라는 누구나 아는 사실이닌깐요.
이러면 용서 해줄래나.

그럼 BCB 와 Delphi 사용자의 확대를 기대하며... 이만....

+ -

관련 글 리스트
15852 Visual C++과 Builder C++의 차이점은?....제발요...ㅜㅜ 쥬니짱 1285 2002/02/27
15864     Re:Visual C++과 Builder C++의 차이점은?....제발요...ㅜㅜ 태즈 1157 2002/02/27
15854     Re:Visual C++과 Builder C++의 차이점은?....제발요...ㅜㅜ 모라 2121 2002/02/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.