다음 이전 차례

1. 서론

C++ 은 가장 널리 쓰이는 언어이고, 앞으론 자바의 등장과는 상관없이 오랜 기간동안 쓰일 것이다. C++ 은 매우 빠르게 실제로 자바보다 20내지 30배 더 빨리 실행된다. 자바는 "virtual engine"위에서 작동되는 번역 (interpreted)어이기때문에 매우 느리게 실행된다. 자바에서 메모리 관리는 자동이라서 프로그래머들은 메모리 얼로케이션 (allocation) 을 직접 다루지 않는다. 이 문서는 C++ 사용을 더욱 편하게 하기 위해 C++ 에서의 메모리 관리를 자동화하는 것을 시도한다. 자바의 좋은 점 메모리 얼로케이션이 자동적으로 처리된다는 것이다. 이 howto는 "C++"이 메모리 관리면에서 자바 언어와(를) "경쟁/모방"하는 것을 가능하게 할 것이다.

C++ 프로그래머들은 수동 메모리 얼로케이션때문에 많은 시간을 소비한다. 이 문서에 있는 정보는 여러분에게 디버깅하는 시간을 줄일 수 있는 더 나은 아이디어와 팁들을 제공할 것이다.

1.1 현재 C++ 컴파일러들이 직면한 문제들

C++ 은 C의 super-set 인 관계로 "C" 언어의 모든 안좋은 점들을 갖고 있다. 예를 들어, "C" 프로그래밍에서는 메모리 유출과 메모리 오버플로우가 흔하다. 왜냐면 다음과 같은 용례때문에


        Datatype  char * and char[]
        String functions like strcpy, strcat, strncpy, strncat, etc..
        Memory functions like malloc, realloc, strdup, etc..

char * 와 strcpy의 사용은 "overflow" "fence past errors", 그리고 "memory leaks" 로 인한 지독한 메모리 문제들을 야기시킨다. 메모리 문제들은 디버그하기 매우 어렵고, 고치고 trouble-shoot하는데 많은 시간을 소모시킨다. 메모리 문제들은 프로그래머들의 생산성을 감소시킨다. 이 문서는 "C++"의 메모리 문제를 해소할 수 있는 여러가지 언급된 방법들을 통해 프로그래머들의 생산성을 증  시키는것을 돕는다. 메모리와 관련된 버그들은 크랙하기 매우 어렵고 심지어 숙련된 프로그래머들도 메모리와 관련된 문제점들을 디버그하는데 몇일, 몇주 혹은 몇달까지 걸리기도 한다. 여러개의 메모리 버그들은 몇개월동안 코드안에 "숨어"있을 것이고 그것들은 기대치 않았던 프로그램 충돌을 야기시킬 수 있다. char * 의 사용은 미국과 일본에서 디버깅 하는 시간과 프로그램의 실행정지로 매년 20억불의 손해를 야기시키고 있다. 여러분이 C++ 에서 char * 를 사용하면, 특히 여러분의 프로그램이 백만줄 이상의 코드가 있다면 그것은 정말로 손해보는 일이다,

그래서 다음의 기술들이 "C" 언어의 약점을 극복하기 위해 다음의 기술들을 제안하는 것이다.

C++ 컴파일러들은 프로그래머들이 "char *" , "char[]" 데이터 타입과 strcpy, strcat, strncpy, strncat과 같은 함수들을 사용하는 것을 막아야한다고 제안한다. char *, char[] 와 같은 데이터타입들과 strcpy, strcat 같은 함수들은 C++의 사용에 있어서 반드시 완전히 금지되어야만 하는 해로운 것들이다!!

모든 C++ 프로그래머들은 char * and char[] 를 사용하는 대신에 이 문서에 나오는 'mychar class'와 STDLIB에 포함된 'string class' 를 반드시 사용해야 한다. 'mychar class' 는 생성자와 소멸자를 이용해서 메모리 관리를 자동화하고 ltrim, substring등등의 여러 함수들을 제공한다.

C++ 컴파일러에 있는 'string class' 도 또한 보자. string class 는 standard GNU C++ library 의 일부분이고 많은 string조작함수   제공한다. string class' 와 'mychar class' 를 쓰면 char * datatype을 쓸 필요가 없어진다. 또한, C++ 프로그래머들은 'malloc' 이나 'free'를 쓰는 대신 'new'와 'delete' 을 쓰도록 권장되어야 한다. 'mychar class' 는 char * 나 char [] 가 하는 모든 것들을 한다. 'mychar class' 는 완벽하게 char datatype을 대신해 쓰일 수 있다. 더구나 프로그래머들은 메모리 문제와 메모리 얼로케이션에 대해서 전혀 걱정할 필요가 없으니 얼마나 이로운 것인가.

GNU C++ 컴파일러는 char *, char[] datatypes 의 지원을 반드시 중지해야하며, char datatype을 이용한 구프로그램을 컴파일하기   해서 컴파일러는 "-fchar-datatype" 라 불리는 옵션을 g++ 명령어에 더 추가로 제공해줘야 한다. 앞으로 2년안에 모든 C++ 프로그램들은 'mychar class' and 'string class' 를 쓰게 될것이고 char * and char[] 는 사라지게 될 것이다. 컴파일러는 안좋은 프로그래   습관을 방지하도록 노력해야한다.

1.2 "C" 를 쓸것인가 "C++" 을 쓸것인가 아니면 자바를 쓸것인가?

모든 응용프로그램이나 일반 목적의 프로그래밍을 위해서는 객체지향적인 언어인 "C++"을 이용해서 프로그래밍을 하는것이 추천된다. "C++"의 객체지향 기능을 충분히 유용할 수 있다. 하지만 -0이나 -03과 같은 컴파일러 optimizer옵션들은 C++의 속도를 증가시킬 수 있다.

요즘엔 "C" 언어가 운영체제, 디바이스 드라이버등을 개발하기위한 "시스템 프로그래밍"에 주로 쓰인다.

자바는 웹 브라우저내에서 실행되는 GUI을 개발하는데 더욱 적합한 플랫폼에 독립된 언어이지만 매우 느리게 실행된다. C++ and HTML, DHTML 과 더불어 Fast-CGI를 사용하는게 더 나은 성능을 발휘하기위해서는 C++ and HTML, DHTML 과 더불어 Fast-CGI를 사용하는게 바람직하다.


다음 이전 차례