[effective C++] Chapter 01 : 01. C++를 언어들의 연합체로 바라보는 안목은 필수
01. C++를 언어들의 연합체로 바라보는 안목은 필수
- C++의 과거와 현재
- C++ 하위 언어 4가지
- C++를 언어들의 연합체로 바라보는 안목의 필요성
- 이것은 잊지 말자 !
C++의 과거와 현재
C++를 언어들의 연합체로 바라보는 안목은 필수이다. 그 이유는 C++의 초창기와 현재의 C++의 차이에 있다.
초창기 C++
- C언어에 단순히 객체지향만이 결합된 형태
현재의 C++
- 함수의 구성 방식을 크게 바꾸는데 일조한 예외 처리 제공
- 프로그램 설계의 새로운 사고방식을 일깨워준 템플릿 제공
- 확장성에 대한 새로운 지평을 연 STL 제공
- 다중 패러다임 프로그래밍 언어
현재의 C++은 절차적 프로그래밍을 기본으로 객체지향, 함수식, 일반화 프로그래밍을 포함하며 메타프로그래밍까지 지원하는 다양한 표현력과 유연성을 가지고 있다. 따라서 혼동의 여지가 많은 것이 사실이고 하위 언어를 잘 이해할 수 있어야 한다. 본 교재에서 얘기하는 C++의 하위 언어는 다음과 같다.
C++의 하위 언어 4가지
1. C
- C++언어는 C언어를 기본으로 한다. 선행 처리자, 데이터 타입, 배열, 포인터 등이 C++이 가지고 있는 C언어의 특징이며 반면 C언어는 템플릿, 예외, 오버로딩 등등이 없다.
2. 객체지향 개념 C++
- 클래스를 가진 C언어를 의미하며 즉 캡슐화, 상속, 다형성, 가상함수 등이 있다.
3. 템플릿 C++
- 일반화 프로그래밍으로 템플릿은 새로운 프로그래밍 패러다임의 파생점이 되었다. 템플릿 메타 프로그래밍 이른바, TMP(Template Meta Programming)이라고 한다.
4. STL
- 템플릿 라이브러리. STL은 컨테이너, 반복자, 알고리즘과 함수 객체를 규약으로 삼아 동작한다.
C++를 언어들의 연합체로 바라보는 안목의 필요성
프로그래밍을 하면서 혹은 개발자로서 프로젝트를 진행하면서 하나의 C++ 코드에서는 STL에서 정한 규약을 따르는 것이 효율적일 수 있다. 그러나 또 다른 프로젝트를 진행하면서는 템플릿만을 혹은 C++의 토대가 되는 C만을 사용하는 것이 더 좋은 결과물로 이어질수도 있다. C++을 공부하면서 앞으로 다양한 그리고 복잡한 형태의 코드를 만나게 될 것이고 알맞게 대응하는 것이 가장 중요하다. 이를 위해서는 앞서 설명한 4개의 하위 언어가 각각 어떠한 규약 혹은 특성을 가지고 있는지를 인지하고 C++은 하위 언어가 통합된 언어(연합체)라는 것을 인지하고 있는 것이 중요하다.
이것은 잊지 말자 !
C++를 사용한 효과적인 프로그래밍 규칙은 경우에 따라 달라진다. 그 경우란, 바로 C++의 어떤 부분을 사용하느냐 이다.