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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[382] 간단개념 - 왜 모든 VCL 객체는 동적생성 해야 하는가
홍환민.행복 [hhshhm] 9026 읽음    2003-04-05 03:15
=====================================================================
--[ 간단개념 2 ]-[ 왜 모든 VCL 객체는 동적 생성해야 하나? ]--
---------------------------------------------------------------------
씨빌더는 델파이의 컴파일러 부분을 내장하고 있고, 델파이로 작성된 VCL
을 그대로 사용하고 있습니다. 이러한 특성으로 인하여 몇가지  제약이 생
겼는데 그 중 하나가 바로 '모든 VCL 객체는 반드시 동적으로 생성해야 한
다' 라는 것입니다. < 참조 1 >

  그렇다면 왜 이러한 것일까요? 바로 앞에서 말했듯이 씨빌더가 델파이의
VCL을 그대로 사용하고 있고, 그로인해 델파이에서 사용되는 언어인 '오브
젝트 파스칼' 의 제약을 그대로 갖기 때문입니다.  오브젝트 파스칼에서는
객체의 정적 생성, 다시 말하면 스택메모리 상의 객체 생성을 지원하지 않
기 때문에 명시적으로 힙 메모리상에 객체를 할당해야 합니다.  이러한 오
브젝트 파스칼의 제약을 씨빌더도 그대로 이어받은 것입니다.

실제로 VCL 객체를 정적으로 생성하려고 하면 다음과 같은 컴파일 에러를
만나게 됩니다.
"VCL style classes must be constructed using operator new"
말 그대로 VCL 스타일의 클래스들은 new 연산자를 이용하여 생성되어야 한
다는 말이지요.

그러나, 이러한 제약사항이 문제될 것은 없습니다. 왜냐하면  < 참조 1 >
의 끝부분에서 언급했듯이 일반적으로 힙 메모리의 크기가 휠씬 크고,  동
적으로 관리가 가능하기 때문에 C++ 언어에서도 일반적으로 정적 생성보다
는 동적 생성을 주로 이용하기 때문입니다.
---------------------------------------------------------------------
--[ 참조 1 ]-[ 정적 생성과 동적 생성 ]--
---------------------------------------------------------------------
변수(구조체, 클래스 및 각종 자료형)의 정적 생성이란 그러한 것들이 컴
파일 시에 생성된다는 의미입니다.  반면 동적 생성이란 런타임 시,  다시
말하면 프로그램이  실행 중인 상태에서 생성이 된다는 의미입니다.

또한 다른 관점에서 바라 본다면  정적 생성에 의해 생성된  변수는 스택
(stack) 메모리 상에 위치하게 되고, 동적 생성된 변수는 힙(heap) 메모리
상에  위치하게 됩니다.

  일반적으로 스택 메모리는 제한적인 크기를 가지고 있고, 힙메모리는 그
에 비해 휠씬  큰 크기를 가진다고  이해하시면 됩니다. 더 자세한 사항은
메모리 구조에 대한 글, 윈도우즈 상에서의 메모리 관리에 대한 글들을 참
고하시면 도움이 될 것입니다.
---------------------------------------------------------------------
--[ 참고자료 ]--
---------------------------------------------------------------------
초보자를 위한 볼랜드 C++빌더3 21일완성  Kent Reisdorph 저/장해인 역
                            SAMS PUBLISHING / Borland PRESS / 인포북
스택, 힙 메모리에 대한 조명근(날래미)님의 조언.
=====================================================================
김백일.cedar [cedar]   2003-04-07 11:20 X
델파이가 있기 전의 오브젝트 파스칼에는 객체를 스택에 생성할 수 있었습니다.
김백일.cedar [cedar]   2003-04-07 11:23 X
스코프 안에서만 사용되는 작은 크기의 객체라면 당연히 스택에 생성하는 것이 편리하지요.
김백일.cedar [cedar]   2003-04-07 11:23 X
이것이 C++이 델파이보다 편리한 점 중에 하나죠.
박지훈.임프 [cbuilder]   2003-07-03 09:51 X
지금도 델파이의 오브젝트 파스칼에서 객체를 스택에서 생성할 수 있습니다.
박지훈.임프 [cbuilder]   2003-07-03 09:52 X
델파이에는 두가지의 객체 키워드가 있는데, class는 힙에만 생성되도록 제한되어 있지만,
박지훈.임프 [cbuilder]   2003-07-03 09:52 X
다른 키워드인 object는 스택에 생성할 수 있습니다.
박지훈.임프 [cbuilder]   2003-07-03 09:52 X
단, object 키워드는 빌더에 포함된 델파이 컴파일러에서는 컴파일이 안되고, 델파이 환경에서만 컴파일이 됩니다.
박지훈.임프 [cbuilder]   2003-07-03 09:54 X
대부분의 델파이 개발자들이 윈도우에서부터 파스칼을 사용하기 시작했기 때문에 이 object 키워드를 아는 분이 별로 없을 뿐이지요.
장성호 [nasilso]   2009-12-07 03:54 X
object키워드가 C++Builder에 포함된 Delphi컴파일러에서는 컴파일이 안되는군요
있는줄은 알았는데 거의 사용해보지 않아서 .. ..
전에도 이글 읽은것 같은데..
간만에 옛글 읽다가 새롭게 알게 되네요

+ -

관련 글 리스트
382 간단개념 - 왜 모든 VCL 객체는 동적생성 해야 하는가 홍환민.행복 9026 2003/04/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.