[Effective C++] 1. C++을 언어들의 연합체로 바라보는 안목은 필수
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
반응형
'Books > Effective C++' 카테고리의 다른 글
[Effective C++] 6. 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자 (0) | 2022.05.09 |
---|---|
[Effective C++] 5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 (0) | 2022.05.08 |
[Effective C++] 4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자 (0) | 2022.05.07 |
[Effective C++] 3. 낌새만 보이면 const를 들이대 보자! (0) | 2022.05.07 |
[Effective C++] 2. #define을 쓰려거든 const, enum, inline을 떠올리자 (0) | 2022.05.06 |
댓글
이 글 공유하기
다른 글
-
[Effective C++] 5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자
[Effective C++] 5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자
2022.05.08 -
[Effective C++] 4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자
[Effective C++] 4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자
2022.05.07 -
[Effective C++] 3. 낌새만 보이면 const를 들이대 보자!
[Effective C++] 3. 낌새만 보이면 const를 들이대 보자!
2022.05.07 -
[Effective C++] 2. #define을 쓰려거든 const, enum, inline을 떠올리자
[Effective C++] 2. #define을 쓰려거든 const, enum, inline을 떠올리자
2022.05.06