1. 언어 수준 / 메모리 관리
- C++ : 하드웨어와 밀접한 저수준 언어. 개발자가 new와 delete로 메모리를 수동 관리.
- C# : .NET 플랫폼에서 실행되는 고수준 언어. 가비지 컬렉터(GC)가 메모리를 자동 관리해 메모리 누수를 줄임.
2. 타입 안전성
C++ — 약한 타입 검사
포인터 연산이나 reinterpret_cast로 잘못된 변환이 가능. 컴파일 시 에러가 없고 런타임에서 예측 불가 동작 발생.
#include <iostream>
using namespace std;
int main()
{
int a = 10;
double* ptr = (double*)&a; // int 주소를 double 포인터로 강제 변환
*ptr = 3.14; // 위험한 접근
cout << a << endl; // 예측 불가능한 값
}
- 컴파일 에러 없음
- int(4바이트)에 double(8바이트)을 저장해 값이 깨짐
- 런타임 오류로 이어질 수 있음
C# — 강한 타입 검사
잘못된 변환을 컴파일 단계에서 차단.
class Program
{
static void Main()
{
int a = 10;
double b = a; // 안전: int → double
int c = b; // ❌ 오류: double → int는 명시적 변환 필요
}
}
- int → double은 안전 변환이므로 허용
- double → int는 컴파일 에러. (int)b와 같이 명시적 캐스팅 필요
비교 표
타입 변환 | 강제 변환 자유로움 (위험) | 안전하지 않으면 컴파일 에러 |
포인터 | 직접 사용 가능, 임의 주소 접근 가능 | 안전 모드에서 차단 |
에러 시점 | 런타임까지 넘어감 | 컴파일 단계에서 차단 |
결과 예측성 | 잘못 쓰면 예측 불가 | 대부분 예측 가능 |
- C++ : 유연하지만 런타임 오류 위험 존재
- C# : 강력한 타입 검사로 오류를 사전 방지
3. 플랫폼 지원
- C++ : 특정 하드웨어/운영 체제에 맞게 네이티브 컴파일
- C# : .NET 기반, 공통 런타임 환경(CLR)으로 다양한 OS에서 실행 가능
'CS > C#_C++' 카테고리의 다른 글
C++ 캐스팅 연산자 (0) | 2025.10.07 |
---|---|
C++ STL(Standard Template Library) (0) | 2025.10.04 |
C# 클래스(Class)와 구조체(Struct)의 차이점 (0) | 2025.10.03 |
C# 박싱(Boxing) 언박싱(Unboxing) (0) | 2025.10.03 |
C# GC(Garbage Collection) (0) | 2025.10.02 |