C++를 언어들의 연합체로 바라보는 안목은 필수
오늘날의 C++는 다중패러다임 프로그래밍 언어(Multiparadigm Programming Language) 라고 불리운다.
절차적(Procedural) 프로그래밍 을 기본으로 하여 객체 지향(Object Oriented) , 함수식(Functional) , 일반화(Generic) 프로그래밍을 포함하며 메타프로그래밍(Meta Programming) 개념까지 지원하고 있다.
C++의 하위 언어로써의 개념은 아래와 같이 네가지가 존재한다.
- C
- C++은 여전히 C를 기본으로 하고 있다.
- 객체 지향 개념의 C++
- 클래스(생성자와 소멸자 개념까지), 캡슐화, 상속, 다형성, 가상함수(동적 바인딩) 등의 객체 지향 설계의 규칙이 적용되는 부분이다.
- 템플릿 C++
- 일반화 프로그래밍의 일환
- 하나의 코드로 다양한 범위를 적용시키는 개념으로써 템플릿 메타 프로그래밍(Template MetaProgramming) 의 기본이 된다.
- STL
- 템플릿 라이브러리
네 가지의 하위 언어들이 C++를 이루고 있으며, 효과적인 개발을 위해 한 하위 언어에서 다른 하위 언어로 옮겨 가면서 대응 전략을 바꿔가야 한다. 변수의 전달을 예를 들었을때 아래와 같은 모습을 보인다.
- C 스타일에서는 기본제공 타입에 대해서는 값 전달이 참조 전달보다 대개 효율이 좋다 라는 규칙이 통한다.
- C++의 C 부분만 사용하다가 객체지향 C++로 옮겨 가면 사용자 정의 생성자/소멸자 개념이 생기면서 상수 객체 참조자에 의한 전달 방식이 더 좋은 효율을 보인다.
- STL 에서는, STL의 반복자 및 함수 객체가 C의 포인터를 본떠 만든것 이기 때문에 STL의 반복자 및 함수 객체에 대해서는 값 전달에 대한 규칙이 효율이 좋아진다.
요점
C++를 사용한 효과적인 프로그래밍 규칙은 C++의 어떤 부분을 사용하느냐에 따라 달라진다.
참고. Effective C++ 3/E - Scott Meyers