반응형
C vs C++ 비교
1. 언어의 핵심 및 특징
- C 언어
- 1972년 개발, 절차지향 언어
- 저수준 시스템 제어에 강함
- 시스템 프로그래밍, 운영체제, 임베디드 시스템 개발에 적합
- 간결함, 효율성, 이식성, 저수준(메모리, 하드웨어 등) 직접 제어 가능
- C++ 언어
- C 기반 + 객체지향 언어의 확장 (1980년대 초)
- 절차지향 + 객체지향 + 제네릭 프로그래밍 지원
- C의 장점 계승+객체 지향 프로그래밍의 개념 도입 → 복잡한 구조의 소프트웨어 개발에 유리
- 객체 지향, C와의 호환성, 풍부한 기능(라이브러리 및 기능), 높은 성능
2. 문법 및 출력 방식 비교
// C 코드
#include <stdio.h>
int main() {
int num = 10;
printf("C 언어: 숫자는 %d입니다.\n", num);
return 0;
}
// C++ 코드
#include <iostream>
int main() {
int num = 10;
std::cout << "C++ 언어: 숫자는 " << num << "입니다." << std::endl;
return 0;
}
- C : printf(), scanf() 사용
- C++ : iostream (cout, cin) 사용 | 네임스페이스(std::) 사용 (→ using namespace std;)
3. 객체지향 프로그래밍 지원 여부
- C : 클래스 ❌, 구조체만 지원
- C++ : 클래스, 상속, 다형성, 캡슐화 등 객체지향 핵심 지원
// C++ 클래스 예시
class Person {
public:
std::string name;
int age;
void introduce() {
std::cout << "안녕하세요, 제 이름은 " << name << "이고 나이는 " << age << "입니다." << std::endl;
}
};
4. 메모리 관리 방식
- C : malloc, free (직접 관리)
- C++ : new, delete + 스마트 포인터(unique_ptr, shared_ptr)
// C 예시
int* ptr = (int*)malloc(sizeof(int));
*ptr = 10;
free(ptr);
// C++ 예시
int* ptr = new int;
*ptr = 10;
delete ptr;
5. 표준 라이브러리 및 자료구조 지원
- C : 기본 유틸리티만 제공 (stdio.h, string.h 등)
- C++ : STL (vector, map, list 등) + 알고리즘 제공
// C++ STL 벡터 예시
std::vector<int> v = {1, 2, 3};
v.push_back(4);
for (int n : v) std::cout << n << " ";
6. 예외 처리 (Exception Handling)
- C : 예외 처리 기능 ❌ → 에러 코드를 수동으로 처리해야 함
- C++ : try~catch, throw 구문을 이용한 예외 처리 지원
- 예외 발생 시 throw로 예외를 던지고, try 블록에서 시도하며, catch로 처리함
- try : 예외가 발생할 수 있는 코드를 감쌈
- throw : 예외 발생 시 예외 던짐
- catch : 발생한 예외를 받아 처리함
- 예외 발생 시 throw로 예외를 던지고, try 블록에서 시도하며, catch로 처리함
// try~catch, throw의 기본 형식
try { // [예외 발생 영역]
if (예외 조건)
throw 예외 객체; // [예외가 발생하면 예외를 던지는 영역]
}
catch (예외 객체) { // [던져진 예외를 잡는 영역]
// [예외 처리 영역]
}
C++ 예외 처리 | C 예외 처리 기능이 없어 아래와 같이 직접 조건 분기로 처리 |
// C++ 예외 처리 코드 // try~catch, throw 구문 #include <iostream> using namespace std; int divideFunc(int a, int b) { if (b == 0) throw invalid_argument("0으로 나눌 수 없음"); return a / b; } int main() { try { int result = divideFunc(10, 0); cout << "결과 : " << result << endl; } catch (const exception& e) { cerr << "예외 발생: " << e.what() << endl; return -1; } return 0; } |
// C 예외 처리 코드 // 예외 처리 기능이 없어 아래와 같이 직접 조건 분기로 처리 #include <stdio.h> int divideFunc(int a, int b) { if (b == 0) { return -1; // 오류 코드 반환 } return a / b; } int main() { int result = divideFunc(10, 0); if (result == -1) { // 직접 예외 처리 printf("에러 : 0으로 나눌 수 없음.\n"); } else { printf("결과 : %d\n", result); } return 0; } |
7. 템플릿 (Template)
- C : 제네릭 기능 없음 → 타입별 함수 반복 작성 필요
- C++ : 템플릿으로 자료형에 상관없는 함수/클래스 작성 가능
// C++ 템플릿 예시
template<typename T>
T add(T a, T b) {
return a + b;
}
8. 성능 및 대표 사용 사례
- 성능
- C : 단순하고 오버헤드 적음 → 고성능, 시스템 프로그래밍, 임베디드 시스템, 하드웨어 제어 등에 적합
- C++ : 구조가 복잡해 약간의 오버헤드 있음, 게임 개발, 고성능 애플리케이션, 복잡한 SW 개발
- 대표 사용 사례
- C : 리눅스 커널, 마이크로컨트롤러 ...
- C++ : 게임 엔진, 데스크톱 앱, 금융 시스템 ...
9. 학습 난이도
- C : 문법 단순, 메모리 관리 등 저수준 개념 필요
- C++ : 기능 많고 문법 복잡 → 보다 높은 진입 장벽
💡 NOTE : 개인마다 편차가 존재할 수 있음.
반응형
'🧑🏻💻 Programming > C, C++' 카테고리의 다른 글
[C++] C++ 예외 처리 (try~catch, throw 구문) (0) | 2025.04.05 |
---|---|
[C/C++] C/C++ 언어 error 처리 (0) | 2022.02.15 |