728x90
반응형

초창기의 C++

단순히 C 언어에 객체 지향 기능 몇 가지가 결합된 형태

 

오늘날의 C++

다중패러다임 프로그래밍 언어(multiparadigm programming language)로 아래의 개념들을 지원하고 있다.

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

따라서 C++을 잘 사용하기 위해선 단일 언어가 아닌, 상관관계가 있는 여러 언어들의 연합체로 봐야 한다.

 

C++의 하위 언어

C++은 4가지의 하위 언어들로 이루어져 있다.

 

1. C

  • C++의 기본이 되는 언어
    • 블록, 문장, 선행 처리자, 기본 제공 데이터 타입, 배열, 포인터 등

2. 객체 지향 개념의 C++

  • '클래스를 쓰는 C'에 관한 모든 것
    • 클래스(생성자와 소멸자 개념까지), 캡슐화, 상속, 다형성, 가상 함수(동적 바인딩) 등

3. 템플릿 C++

  • C++의 일반화 프로그래밍 부분
  • 새로운 프로그래밍 패러다임인 템플릿 메타 프로그래밍(template metaprogramming: TMP)이 파생

4. STL

  • 템플릿 라이브러리
  • 컨테이너, 반복자, 알고리즘, 함수 객체가 얽혀 돌아가는 것을 규약으로 삼고 있음

 

따라서 효과적인 프로그램 개발을 위해 한 하위 언어에서 다른 하위 언어로 옮겨가며 대응 전략을 바꾸어야 하는 상황이 오더라도 당황하지 말아야 한다.

예를 들어,  C 스타일의 경우 기본 제공 타입에 대해서는 "값 전달이 참조 전달보다 대개 더 효율이 좋다"라는 규칙이 통하지만 객체지향 C++로 옮겨가면 사용자 정의 생성사/소멸자 개념이 생기면서 상수 객체 참조자에 의한 전달(pass-by-reference-to-const) 방식이 더 좋은 효율을 보인다. 이러한 현상은 템플릿 C++에서 더 두드러지는데, 왜냐면 템플릿 C++은 사용하는 객체의 타입조차 알 수 없기 때문이다. 그러나 다시 STL 쪽으로 넘어오면 STL의 반복자 및 함수 객체는 C의 포인터를 본떠 만든 것이기 때문에 값 전달이 더 효율적이게 된다.

이렇게 각각의 하위 언어들은 자신만의 규칙을 가지고 있고, 이러한 점을 알고 있다면 C++을 더 효율적으로 사용할 수 있다.

 

이렇게 C++을 사용한 효과적인 프로그래밍 규칙은 바로 C++의 어느 부분을 사용하는지에 달려있다.

728x90
반응형