C++ — Simula의 객체와 C의 효율을 합성한 다중 패러다임 언어 (1985, Bjarne Stroustrup)
C++ — Simula의 객체와 C의 효율을 합성한 다중 패러다임 언어
1. 요약
C++는 1979년 AT&T Bell Labs에서 Bjarne Stroustrup이 시작한 *"C with Classes"*에서 출발하여, 1985년 첫 상용 릴리스와 함께 *C++*라는 이름으로 공식화된 다중 패러다임 언어이다. Simula의 객체지향과 C의 시스템 프로그래밍 효율을 하나의 언어로 합성한 것이 핵심 — 이로써 객체지향이 학문적 실험에서 산업의 표준으로 옮겨갔다. 1998년 ISO C++98 표준화, 이후 C++11/14/17/20/23으로 진화 중.
2. 등장 배경
Stroustrup은 박사 과정 중 두 언어 사이에서 갈등했다.
- Simula 67 — 대규모 시스템 설계에 좋았지만 너무 느렸다.
- BCPL — 빠르고 가벼웠지만 너무 저수준이었다.
AT&T Bell Labs에서 UNIX 커널을 분산 컴퓨팅으로 분석하는 작업을 맡으면서, Stroustrup은 *"C 언어에 Simula의 기능을 더하자"*는 결심을 한다. C가 선택된 이유는 "general-purpose, fast, portable, and widely used".
1979년 "C with Classes" 시작 → 1983년 C++로 개명("C에 1을 더한") → 1985년 첫 상용 릴리스. 같은 해 The C++ Programming Language 1판 출간.
3. 핵심 특징
- 클래스와 상속(Class & Inheritance) — Simula의 객체 개념을 C 위에서 구현.
class·virtual function·public/private/protected. - 다중 상속(Multiple Inheritance) — C++ 2.0(1989)에서 도입. Diamond 문제와 그 해결을 위한
virtual상속 — OO 설계 논쟁의 중심. - 템플릿(Templates) — 1990년대 후반 도입. 제네릭 프로그래밍을 컴파일 시점에 기록. STL(Standard Template Library)이 그 결정적 산물.
- 연산자 오버로딩(Operator Overloading) —
+·<<·==등을 클래스가 자기 정의 가능. 수학·도메인 특화 라이브러리의 강력한 도구. - RAII (Resource Acquisition Is Initialization) — 생성자에서 자원 획득, 소멸자에서 해제. 가비지 컬렉션 없는 언어에서 결정적 자원 관리를 기록하는 사상. C++의 가장 독창적 기여.
4. 주 용도
- 시스템 프로그래밍: Windows·macOS·Linux 모두 일부가 C++. Chrome·Firefox 핵심.
- 게임 엔진: Unreal·Unity 핵심·CryEngine — 성능과 객체 모델의 동시 요구.
- 금융 시스템: 고빈도 거래(HFT)·은행 거래 시스템 — 마이크로초 단위 응답성.
- 임베디드·실시간: 자동차 ECU·항공 시스템·IoT.
- 대규모 응용: Adobe Photoshop·MATLAB 핵심·LLVM 컴파일러 인프라.
5. 그 시대 설계 도구 매핑
C++가 산업 표준이 된 1990년대 전반은 시각적 OO 설계의 황금기였다.
| 도구 | 역할 | C++와의 관계 |
|---|---|---|
| Booch Method (Grady Booch, 1991, Object-Oriented Design with Applications) | 객체·클래스·구름 모양 다이어그램 | Booch 책의 코드 사례 다수가 C++/Ada |
| OMT (Object Modeling Technique) (James Rumbaugh, 1991, Object-Oriented Modeling and Design) | 객체 모델 + 동적 모델 + 기능 모델 | 1990년대 OO 설계의 산업 표준 |
| Use Case (Ivar Jacobson, 1992, Object-Oriented Software Engineering) | 사용자 시나리오 중심 분석 | OO 분석의 입구 |
| UML 1.0 (1997) | Booch + OMT + Jacobson의 통합 표기법 | 23개 패턴(GoF), 클래스/시퀀스/상태/배치 다이어그램 — 모두 C++ 코드와 직접 매핑 |
| Design Patterns: GoF (Gamma·Helm·Johnson·Vlissides, 1994) | 23개 OO 설계 패턴 | 책의 코드 사례가 C++/Smalltalk. Strategy·Observer·Factory가 C++ 코드 베이스의 일상이 됨 |
| Rational Rose (Rational Software, 1990년대) | UML 시각적 모델링 도구 | C++ 코드 ↔ UML 다이어그램 왕복 엔지니어링 |
→ C++ 시대의 결정적 사건: 3 거인의 합병. 1994년 Booch와 Rumbaugh가 합류, 1995년 Jacobson이 합류. 1997년 UML 1.0 발표. 즉 C++가 산업 언어로 자리잡은 시기 와 UML이 표준 설계 표기법이 된 시기가 정확히 일치한다 — 우연이 아니다.
6. 강의 활용
핵심 명제와의 연결: C++의 산업적 성공은 언어 자체의 우월성보다 *언어 + 시각적 설계 도구(UML)*의 짝이 맞았기 때문이다. 즉 코드보다 먼저 클래스 다이어그램과 시퀀스 다이어그램으로 설계한다는 작업 흐름이 산업 표준이 되었다. No Design, No Code의 첫 번째 산업적 표어가 *"UML로 설계 먼저, C++로 코드 나중"*이었다.
강의에서의 위치: G4 시리즈의 산업적 정점. Smalltalk가 사상적 원형이라면, C++는 산업적 표준. UML과 짝을 이룬 것이 결정적.
오늘날의 흔적:
- Rust의 RAII와 소유권은 C++ RAII의 후예. C++가 수동으로 박은 RAII 사상을 컴파일러가 강제하는 형태로 진화.
- C++ 자체도 살아있음 — C++23이 2024년 발표. Concepts·Coroutines·Ranges로 진화 중.
- 모든 OO 언어(Java·C#·Swift·Kotlin)가 C++ 클래스 모델의 변형.
- UML은 산업 현장에서 사용 빈도가 줄었지만, 클래스 다이어그램·시퀀스 다이어그램은 여전히 대형 시스템 설계의 공용어.
오늘 LLM 시대로의 다리: AI Agent에게 C++ 코드를 작성시키려면, 클래스 다이어그램과 동등한 명세를 줘야 한다. Spec → 클래스 → 코드라는 흐름은 1990년대 UML 시대 그대로다. 단지 Spec을 기록하는 사람이 사람 → AI Agent + 사람으로 바뀌었을 뿐. 즉 UML 시대의 시각적 설계 사상이 LLM 시대의 Spec-Driven Development로 형태를 바꾸어 살아남았다.
출처
- Wikipedia, "C++", https://en.wikipedia.org/wiki/C%2B%2B
- Stroustrup, B. (1986/2013). The C++ Programming Language (1st/4th ed.). Addison-Wesley.
- Stroustrup, B. (1994). The Design and Evolution of C++. Addison-Wesley.
- Booch, G. (1991). Object-Oriented Design with Applications. Benjamin/Cummings.
- Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.
그룹 시리즈
→ synthesis/group-g4 (시대 그룹 종합 카드)