C와 C++는 이름이 비슷해서 같은 계열의 언어처럼 느껴지지만, 설계 철학과 제공하는 기능 면에서 여러 가지 중요한 차이가 있습니다. 이 글에서는 두 언어의 핵심적인 차이점을 하나씩 살펴보고, 마지막에 비교표로 한눈에 정리해 드립니다.
C와 C++의 주요 차이점
- 언어의 관계: C는 C++의 하위 집합(subset)에 해당합니다. 따라서 대부분의 유효한 C 프로그램은 별도의 수정 없이도 C++ 컴파일러로 컴파일할 수 있습니다.
- 프로그래밍 패러다임: C는 구조적(절차 지향) 프로그래밍 언어인 반면, C++는 객체 지향 프로그래밍 언어입니다.
- 기본 구성 단위: C에서는 함수(function)가 프로그램의 기본 빌딩 블록 역할을 하지만, C++에서는 객체(object)가 기본 빌딩 블록입니다.
- 참조 변수: C에는 변수 참조(reference) 기능이 없지만, C++는 참조 변수를 지원하여 간편하게 원본 값에 접근할 수 있습니다.
- 메모리 할당: C는 malloc과 free 함수를 사용해 메모리를 할당·해제하는 반면, C++는 new와 delete 연산자를 사용합니다.
- 오류 처리: C는 오류 처리를 위한 직접적인 지원이 없지만, C++는 예외 처리(exception handling) 메커니즘을 통해 오류를 감지하고 안정적으로 처리할 수 있습니다.
- 오버로딩: C는 함수 오버로딩과 연산자 오버로딩을 모두 지원하지 않지만, C++는 두 가지 모두 지원하여 같은 이름의 함수나 연산자를 상황에 맞게 재정의할 수 있습니다.
- 제네릭 프로그래밍: C는 제네릭 프로그래밍을 지원하지 않지만, C++의 템플릿(template)을 활용하면 자료형에 독립적인 범용 코드를 작성할 수 있습니다.
- 네임스페이스: C는 네임스페이스를 지원하지 않지만, C++는 네임스페이스를 통해 식별자 간의 이름 충돌을 효과적으로 방지할 수 있습니다.
한눈에 보는 C vs C++ 비교표
| 구분 | C | C++ |
|---|---|---|
| 패러다임 | 절차 지향 | 객체 지향 + 절차 지향 |
| 기본 단위 | 함수 | 객체 |
| 메모리 할당 | malloc / free | new / delete |
| 예외 처리 | 미지원 | try-catch 지원 |
| 오버로딩 | 미지원 | 함수·연산자 지원 |
| 템플릿 | 미지원 | 지원 |
| 네임스페이스 | 미지원 | 지원 |
어떤 언어를 선택해야 할까?
운영체제, 임베디드 시스템처럼 하드웨어에 가까운 저수준 제어가 필요하다면 C가 적합합니다. 반면 대규모 소프트웨어 개발, 게임 개발, GUI 애플리케이션처럼 코드 재사용성과 유지보수성이 중요하다면 객체 지향 기능을 갖춘 C++가 더 유리합니다. 두 언어의 차이를 정확히 이해하면 프로젝트 성격에 맞는 최적의 선택을 할 수 있습니다.