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

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

yeoul0714 2025. 4. 12. 02:23

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