프로그래밍/C\C++
[Effective C++ 정리 #1] C++는 하나의 언어가 아니다
허구의
2025. 6. 13. 19:28
728x90
이 글은 『Effective C++』를 읽고 개인적으로 공부한 내용을 정리한 기록입니다.
저는 컴퓨터공학을 전공하지 않았으며, 프로그래밍을 공부하는 과정에서의 이해와 생각을 정리하기 위해 글을 작성하고 있습니다.
따라서 내용 중 일부에 오류나 부정확한 설명이 있을 수 있으며, 피드백은 언제든지 환영합니다. 확인 후 수정하도록 하겠습니다.
전문적인 해설이 아닌 개인적 시선에서의 정리임을 참고하고 읽어주시면 감사하겠습니다.
Item 1: C++은 네 개의 언어가 합쳐진 구조다
C++는 초보자뿐 아니라 경험자에게도 복잡한 언어로 평가받습니다. 그 이유 중 하나는 하나의 규칙 체계로 설명할 수 없는 언어 구조 때문입니다. Effective C++의 첫 번째 항목은 이 문제에 대해 본질적으로 접근합니다.
저자는 C++를 더 잘 이해하고 다루기 위해서는, C++를 **단일 언어로 보지 말고 ‘네 개의 언어가 결합된 연합체’로 보라**고 말합니다.
C++는 어떻게 구성되어 있는가?
C++는 다음과 같은 네 가지 하위 언어(Sub-language)로 구성되어 있으며, 각각은 서로 다른 규칙과 사고방식을 가집니다.
1. C 스타일 C++
- 포인터, 배열, 구조체, 전처리기 등 C 언어의 유산을 포함합니다.
- 예외 처리, 클래스, 템플릿 등은 포함되지 않으며, 구조가 단순한 대신 제약도 많습니다.
- 예:
char*
,#define
,malloc/free
2. 객체지향 C++
- 클래스를 중심으로 한 추상화(encapsulation), 상속(inheritance), 다형성(polymorphism) 등을 다룹니다.
- 생성자/소멸자, 가상 함수(
virtual
) 및 동적 바인딩이 핵심 개념입니다. - “C with Classes” 시절의 C++를 대표하는 영역입니다.
3. 템플릿 기반 C++
template
키워드를 활용한 제네릭 프로그래밍이 중심입니다.- 템플릿 메타프로그래밍(TMP)은 고급 주제로, 컴파일 타임 계산 및 추상화에 사용됩니다.
4. STL (Standard Template Library)
- vector, list, map 등의 컨테이너, 반복자(iterator), 알고리즘 등을 포함하는 템플릿 기반 라이브러리입니다.
- 독자적인 관용 표현과 설계 원칙을 갖고 있으며, 반복자 모델이 포인터 기반과 유사한 점도 많습니다.
이 네 가지 언어는 어떻게 다르게 동작하는가?
각 언어는 동일한 문법이라도 다르게 해석되거나 사용되는 경우가 많습니다. 예를 들어 변수 전달 방식만 봐도 다음과 같은 차이가 있습니다:
- C 스타일:
int
같은 기본형은 값 전달이 효율적 - 객체지향: 생성자/소멸자 호출 비용이 있으므로
const 참조
가 바람직 - 템플릿: 타입을 알 수 없기 때문에 참조 전달이 안전
- STL: 반복자와 함수 객체는 C 스타일과 유사하므로 값 전달이 효과적
핵심 요약
- C++는 단일한 규칙을 따르는 언어가 아니라, 사용자가 사용하는 방식에 따라 달라집니다.
감사합니다.
728x90