C언어 스타일의 C++ 프로그래밍을 고치기 위하여 ~

프로그래밍/C++ 2006/04/04 11:10
C언어 스타일의 C++ 프로그래밍을 고치기 위하여 ~
2006.4.4 by Xevious7

BASIC으로 시작하여 FORTRAN , COBOL , 그리고 잊지 못할 Pascal
개인적으로 Pascal은 정말 재미있는 언어였습니다.  미니컴퓨터(이제는
거의 쓰이지 않는 용어입니다. 따라서 부가 설명을 하쟈면 예전에
메인프레임이라는 대형컴퓨터가 있었고 PC같이 메인프레임에 비해서
턱없이 작은 컴퓨터를 마이크로컴퓨터라고 했습니다.
사실 마이크로소프트 라는 이름도 마이크로컴퓨터라는 이름에서 시작한거죠
지금은 메인프레임이 사라져가면서 마이크로컴퓨터라는 용어는 이제거의
쓰지 않고 PC라고 부릅니다. 이 메인프레임과 PC사이의 중간크기의
컴퓨터를 미니컴퓨터라고 했습니다. 크기는 보통 지금 지펠 냉장고만합니다.
음 보조기억장치로 쓰는 자기드라이브(이게 하드드라이브입니다.)가
김치냉장고 만합니다.) 에서 Pascal을 써서 컴파일 하다가 PC에서 Turbo Pascal 1.0
버전을 돌릴때의 감동을 잊지 못합니다.

CG와 그래픽이 프로그래밍의 주된 관심사였기 때문에 허큘리스라는
그래픽 카드를 제어하는 BGI라는 그래픽 라이브러리 때문이었습니다.
미니 컴퓨터에서는 Text로 하는 그래픽은 가능했지만  주로

+++---//// 이런 문자로 모나리자 그리기 같은것 말입니다.
그러한 프로그램은 디더링이라는 고해상도 그림을 저해상도로 표현하는
기법에 의한 것입니다.

이야기가 한참 밖으로 벗어났네요 ^.^

Pascal은 정말 재미있었지만 Turbo C 라는 컴파일러를 접하면서
좀더 저레벨의(Low level : 여기서 저레벨이라는 의미는 레벨이
낮다는 의미가 아닙니다. 하드웨어에 점점 가까워진다는 의미입니다.
이에 반해서 하드웨어와 점점 멀어지는 것을 high level이라고
표현합니다. 이러한 표현은 컴퓨팅의 초장기에 assembly 같은
기계어와 1:1 대응 언어를 저수준 언어(low level language )라고
부르고 인간의 언어와 비슷한 프로그래밍 언어를 고수준 언어
(high level language)라고 불리었기 때문입니다.) 제어가 가능한
C언어로 바로 옮겨갔습니다.
절자척 언어 패러다임의 최강자였던 C 언어는 아직도 강자입니다만
객체적 언어 패러다임을 수용한 C언어 문법도 가능한 C++로
서서히 옮겨졌고 저도 그 대세에 맞추어 C++를 병행 사용했습니다.

처음엔 C++을 사용했다기 보다는 C++컴파일러로 C를 사용했습니다.
지금은 클래스를 사용하지만요 ^^;
대부분의 C프로그래머가 그랬으리라 생각합니다.

어찌되었든 C++를 쓰고 있지만 스타일은 C를 벗어나지 못하는
프로그래머입니다.

복습은 최고의 학습의 미덕이라고 생각하는 저이기에  93년에
처음 배웠던 C++를 새책으로 열심히 복습하려던 차에 정말 좋은 글이 있더군요.

앞으로 코딩을 할때 저의 C 프로그래밍 스타일을 바꾸기 위해서 꼭 염두에
두어야 할 것 같습니다.

[1] 매크로(macro) 는 C++에서는 불필요한 정도에 이르렀다.
    구분용 상수를 정의하는 데는 const 나 enum 을 쓰면 되고,
    함수 호출 오버헤드를 피하는 수단으로는 inline을 쓰면 된다.
    함수와 타입의 일반화 형태를 만드는 데는 template 라는 강력한 기능이
    있으며, 이름 충돌을 막을 수 있는 namespace라는 것이 있다.

[2] 앞부분에서 변수를 미리 선언해서 바로 초기화 하지 않아도 된다.
     C++ 는 문장이 있는 곳이라면 어디에서도 변수 선언을 할 수 있고
     for 구문의 초기식과 조건문의 조건식에도 변수 선언이 가능하다.

[3] malloc()을 쓰지 말고 , 똑같은 일을 더 안전하게 해 주는 new 연사자를
    사용하자.
realloc()도 마찬가지로서 이것 대신에 vector를 사용해보자.

[4] 일부의 함수나 클래스를 구현하다 어쩔 수 없이 깊이 들어가야 하는
    경우를 제외하고 void* 포인터 산술 연산, 공용체(union), 캐스팅은
    되도록 사용하지 않도록 한다. 대부분의 경우, 캐스팅이 등장하면
    어딘가 설계가 잘못되었다는  뜻이다.

[5] 배열과 C 스타일의 문자열 사용을 최대한 줄인다. C++ 표준 라이브러리의
    string과 vector 를 사용하면 이러한 C 스타일 프로그래밍을 간단하게 만들
    수 있다. 표준 라이브러리에서 이미 제공되는 것들은 다시 만들려고
    애쓰지 않는 것이 상식이다
.

- 인용 출처 - The C++ Programming Language - Bjarne Stroustrup.


5번의 경우 상당히 찔립니다. 표준라이브러리보다 만들어 쓰는것을 즐겼는데 말이죠
사실 아주아주 예전에는 도스플랫폼에서 구현된
표준라이브러리가 버그있는 것들이 좀있어서 생겼던 습관이지만
더 좋은 방법은 그 오류를 고쳐서 표준라이브러리 업데이트 시키는게 나은것 같습니다.

3번도 new가 있다는것은 C++을 처음 배울때 부터 알았지만 그 뭔가의 타성이랄까
웬지 new를 쓰면 malloc보다 에러가 나올것 같구 느릴것 같은 그런 착각속에;;
하지만 아직도 웬지 new를 쓰기는 싫답니다. 도대체 이유가 몰까요 ??
저만 그런줄 알았지만 C언어부터 시작하다고 C++를 배운
스타일의 C++사용자는 그런 경향이 강하다는것을
책에서 알았습니다.  도대체 무엇이 new보다 malloc를 쓰도록 만드는 것일까 궁금합니다.
^^
물론 위의 지침은 C++프로그래밍 에만 적용됩니다.
C위주의 스타일 코딩에서는 오히려 안좋은 지침이라고 생각됩니다.

From Xevious7.  learn from all the people. 스스로 겸손하자.
top

◀ PREV : [1] : .. [3] : [4] : [5] : [6] : [7] : NEXT ▶