본문 바로가기

Effective C++/1. C++에 왔으면 C++ 법을 따릅시다

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

초창기 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개가 각각 자신만의 규칙을 가지고 있다.