초창기 C++ : C with Classes 라고 불릴 정도
예외(함수 구성방식 변화), 템플릿(새로운 프로그램 설계 방식), STL(확장성) 등등
=> C++ : multiparadigm programming language (다중 패러다임 프로그래밍언어)
절차적 프로그래밍(구조적 프로그래밍) + 객체 지향 + 함수식(functional) + 일반화(generic) + metaprogramming 등등
여러 가지 패러다임이 포함되어있음.
=> 여러가지가 있는건 좋지만, 이들 사이에서 혼동을 느낄 수 있다.
=> C++ 를 단일 언어로 바라보는 시각에서 벗어나 상관관계가 있는 여러 언어들의 연합체로 봐야 한다.
그 후 각개격파 => C++는 여러 개의 하위언어를 제공한다고 봐야됨
- C
C++는 C를 기본으로 하고 있다.
- 객체지향의 C++
C with Classes => 클래스(생성자, 소멸자, encapsulation, inheritance, polymorphism, virtual function, dynamic binding…)
- 템플릿의 C++
C++의 일반화 프로그래밍 부분, 템플릿 메타프로그래밍(TMP)
- STL
표준 템플릿 라이브러리, STL 세계는 컨테이너, 이터레이터, 알고리즘, 함수객체가 얽혀있다. 또 STL도 나름대로 독특한 규약이 있기 때문에 그 규약에 따라 쓰면 됨
즉 C++는 4개의 하위 언어로 구성되있다고 봐도 무방하다.
내가 C++에서 C를 쓰고 있다. => call-by-value가 call-by-pointer 보다 효율이 좋지만, 객체지향의 C++로 옮겨가면 user-define constructor, destructor 개념이 생기고 pass-by-value보다 pass-by-reference to const(const& object) 가 효율이 더 좋다.
pass by value => 값만 옮겨감, 즉 원래 객체에는 영향을 안줌
pass by reference to const => 래퍼런스, 즉 메모리공간을 그대로 쓰는건데, cosnt가 붙어 있다 => 즉 원래 객체에는 영향을 안주면서 메모리공간을 새로 만들 필요가 없으므로 효율이 더 좋다.
템플릿 C++로 오면 우리가 손에 들고 있는 객체의 type도 알 수 없기 때문에 이 경향이 더 두드러짐
const&로 넘기면 type을 알 필요가 없다. 메모리 공간을 새로 할당하는 것이 아니기 때문(메모리 공간을 할당할려면 type 정보를 반드시 알아야 한다. 할당할 메모리 공간의 크기를 정해야 하기 때문)
STL C++로 오면 또 달라지는데, iterator와 함수 객체들이 C의 포인터를 본떠 만들었기 때문에 STL의 iterator 및 함수 객체에 대해서는 값 전달에 대한 규칙이 다시 바뀌게 된다.
즉 이렇게 C++는 한 가지 프로그래밍 규칙 아래 뭉친 통합 언어가 아니라, 4가지 하위 언어들의 연합체이다.
C, 객체지향C++, 템플릿C++, STLC++ 이 4개가 각각 자신만의 규칙을 가지고 있다.
'Effective C++ > 1. C++에 왔으면 C++ 법을 따릅시다' 카테고리의 다른 글
항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화 하자 (0) | 2021.04.24 |
---|---|
항목 3: 낌새만 보이면 const를 들이대 보자! (0) | 2021.04.24 |
항목 2: #define을 쓰려거든 cosnt, enum, inline을 떠올리자 (0) | 2021.04.24 |