본문 바로가기

업무용 언어/C++

[Effective C++] 항목 1. C++를 언어들의 연합체로 바라보는 안목은 필수

[Effective C++] 항목 1. C++를 언어들의 연합체로 바라보는 안목은 필수

C++ 은 다중 패러다임 언어다.

  • 절차적 프로그래밍
  • 객체 지향 프로그래밍
  • 함수형 프로그래밍
  • 일반적 프로그래밍
  • 메타프로그래밍

C++ 는 4개의 하위 언어로 구성되어 있다.

  • C 언어: C++ 의 근간은 C 언어다. 블록, 문장, 선행 처리자, 기본 제공 데이터 타입, 배열, 포인터 등. 이들 중 상당수는 구식의 것이며 C++ 의 것으로 대체할 수 있는 방법을 활용하는 것이 좋다. 그러나 C++ 개발자라면 이들 개념에 대해 정확히 알고 있어야 할 것이다.

  • 객체 지향 C++: 클래스(생성자와 소멸자), 캡슐화, 상속, 다형성, 가상 함수(동적 바인딩) 등.

  • 템플릿 C++: 일반화 프로그래밍 영역. 템플릿의 힘은 너무나도 강력해서 새로운 프로그래밍 패러다임이 생기기도 하였다(템플릿 메타프로그래밍).

  • STL: 표준 템플릿 라이브러리(Standard Template Library). 컨테이너, 반복자, 알고리즘, 함수 객체가 얽혀있다. STL은 나름대로 정형화된 사용 규칙이 있기 때문에 그 규칙을 따라 사용한다.

C++에서는 이들 개념을 자유자재로 사용하는 것이 중요하다.

기본 제공 타입에 대해서는 참조 전달 보다는 값 전달을 하는 것이 더 좋다.

사용자 정의 타입에 대해서는(생성자와 소멸자의 개념 때문에) 상수 객체 참조자에 의한 전달(pass-by-reference-to-const)이 더 좋다.

그러나 STL의 반복자와 함수 객체에 대해서는(C 언어의 포인터를 본떠 만든 것이기 때문에) 값 전달을 쓰는 것이 더 좋다(매개 변수 전달 방법을 결정하는 사항은 항목 20에서 살펴봄).

C++를 사용한 효과적인 프로그래밍 규칙은 경우에 따라 달라진다. 그 경우란, 바로 C++의 어떤 부분을 사용하느냐다.