[Effective C++] 항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수
04/12 오전 2시 Effective C++ 완독을 향한 여정을 시작합니다.
1. C++의 발전
초창기의 C++은 단순히 클래스를 쓰는 C++이었습니다.
그러나 C++은 시간이 지나면서 많은 발전을 했고 우리는 이것은 다중 패러다임 언어(Multiparadigm programming language)
이라고 부릅니다.
절차적, 객체 지향, 함수식, 일반화, 메타프로그래밍을 지원합니다.
2. C++을 연합체로 보자
C++을 단일 언어에서 상관관계가 있는 여러 언어의 연합체로 보자.
그런뒤 각 언어에 대한 규칙을 각개 격파하자.
이러면 단순, 명확하고 기억하기도 편리하다.
그렇다면 C++는 어떠한 하위 언어로 이루어져 있을까?
2-1. C
C++은 C를 기본으로 하고있다.
그러나 C만 쓰기엔 기능이 너무 부족하다. (템플릿, 예외처리, 오버로딩)등이 없다.
2-2. 객체 지향 개념의 C++
캡슐화, 상속, 다형성, 가상 함수(동적 바인딩)등 우리가 배운 객체 지향 설계 규칙 대부분이 여기에 해당된다.
2-3. 템플릿 C++
C++ 일반화 프로그래밍의 일부분이고 경험 못해본 프로그래머가 많다.
템플릿은 C++에 아주 전방위적인 영향을 끼치고 있다.
템플릿이 너무나 강력하다보니 템플릿 메타 프로그래밍(TMP)이라는 새로운 패러다임이 파생되기도 했다.
2-4. STL
이름처럼 템플릿 라이브러리이다.
container, iterator, algorithm, function object가 얽혀서 돌아가고 있다.
그러나 템플릿, 라이브러리는 얼마든지 다른 아이디어를 중심으로 만들 수 있다.
STL은 독특한 사용규약이 있어서 이것을 따라 프로그래밍 하면 된다.
3. 결론
4가지 하위 언어들이 C++을 이루고 있다는 사실을 명심하고
하위 언어 사이를 옮겨 가며 대응 전략을 바꿔가면서 개발이 가능해야 한다.
예를 들자면,
C에서는 값 전달이 참조 전달보다 효율이 좋다고 통하지만
C++에서는 객체 참조자에 의한 전달이 좋은 효율을 보인다.
템플릿에서는 타입조차 알 수 없어서 참조로 넘기는게 훨씬 좋다는 사실이 더 두드러진다.
그러나 STL은 iterator와 function object가 C의 포인터를 기반으로 만들어졌기에
다시 값 전달이 유용해진다.
이것만은 잊지 말자!
- C++를 사용한 효과적인 프로그래밍 규칙은 경우에 따라 달라지고 그 경우는 C++의 어느 부분을 사용하느냐이다.
항목 2
https://yeoul0714.tistory.com/27
[Effective C++] 항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자
C++에서는 선언(declaration)과 정의(definition)를 구분합니다:선언: 컴파일러에게 이름과 타입을 알려주는 것정의: 실제 메모리 할당이 이루어지는 것 1. #define을 지양해야 하는 이유들1-1. 컴파일 곤란
yeoul0714.tistory.com