C++ — Simula의 객체와 C의 효율을 합성한 다중 패러다임 언어 (1985, Bjarne Stroustrup)
Entity (인물·조직)lectureverified2026-05-09

C++ — Simula의 객체와 C의 효율을 합성한 다중 패러다임 언어 (1985, Bjarne Stroustrup)

#vch#lecture-intro#A-language#g4

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. 핵심 특징

  1. 클래스와 상속(Class & Inheritance) — Simula의 객체 개념을 C 위에서 구현. class·virtual function·public/private/protected.
  2. 다중 상속(Multiple Inheritance) — C++ 2.0(1989)에서 도입. Diamond 문제와 그 해결을 위한 virtual 상속 — OO 설계 논쟁의 중심.
  3. 템플릿(Templates) — 1990년대 후반 도입. 제네릭 프로그래밍컴파일 시점에 기록. STL(Standard Template Library)이 그 결정적 산물.
  4. 연산자 오버로딩(Operator Overloading)+·<<·== 등을 클래스가 자기 정의 가능. 수학·도메인 특화 라이브러리의 강력한 도구.
  5. 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과 짝을 이룬 것이 결정적.

오늘날의 흔적:

  • RustRAII와 소유권은 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 (시대 그룹 종합 카드)