CS/C#_C++

(공통)C++과 C# 언어 특성 비교

tae-woong 2025. 10. 2. 00:55
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