=====================================================================
--[ 간단개념 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 / 인포북
스택, 힙 메모리에 대한 조명근(날래미)님의 조언.
=====================================================================
|