[C++] C++과 C#의 차이

limce·2024년 1월 22일
0

C++

목록 보기
3/5

구문

  • C++는 C와 유사한 구문을 사용하는 저수준 언어이고, C#은 Java와 유사한 구문을 사용하는 고수준 언어이다.

컴파일

  • C++은 어플리케이션의 실행 파일을 운영체제가 바로 실행하므로 어셈블리어로 컴파일된다.
  • C#은 가상 머신 실행 환경인 .NET에서 실행되므로 이에 적합한 중간수준의 언어인 IL(Intermediate Language)로 컴파일한다.
    컴파일된 C# 스크립트는 CLR(Common Language Runtime, 공용 언어 런타임)에 의해 실행된다.
  • 고수준 언어에서 저수준 언어로 컴파일하는 C++의 컴파일 시간이 고수준 언어에서 중간수준 언어로 컴파일하는 C#의 컴파일 시간보다 매우 길다.

컴파일러 경고

  • C#은 컴파일 타임과 런타임에 엄격한 유형 검사를 시행하는 강력한 유형 언어인 반면,
    C++은 유연성은 높지만 OS를 실행하는 데 심각한 피해를 줄 수 있고 더 많은 오류가 발생할 수 있는 약한 유형 언어이다.

문법

  • C++은 다중 상속을 지원하나 C#은 지원하지 않는다.
  • C++은 배열 바운드 검사를 지원하지 않으나 C#은 지원한다.
  • C++은 Switch case문의 case 레이블에 문자열을 사용할 수 없지만 C#은 가능하다.
    C++은 특정 case 레이블에서 작업을 수행한 뒤 break로 빠져나오지 않으면 자동으로 다음 레이블로 이동하지만, 이는 C#에서 불가능하다.
  • C++은 Foreach 루프를 지원하지 않으나 C#은 지원한다.
// C++
for(auto ele : array){ ... }

// C#
foreach(int ele in array){ ... }

값 타입

  • C++: 정적으로 할당한 모든 형태의 데이터
    해당 데이터가 int, double, char 등의 기본 타입이든, 클래스를 이용해 만든 객체이든 정적으로 할당했다면 값 타입으로 분류된다.
  • C#: 기본 타입구조체

참조 타입

  • C++: 동적으로 할당한 모든 형태의 데이터, & 기호를 붙여 선언한 참조형 변수
  • C#: 클래스로 만든 객체들
  • C#에서 기본 타입이나 구조체는 동적 할당이 불가능, 클래스만 동적 할당 가능

메모리 관리

  • C++는 포인터와 new, delete를 사용하여 메모리 할당 및 해제를 수동으로 제어하는 반면, C#은 CLR이 GC(Garbage Collector)를 활용하여 메모리를 자동으로 해제한다.
  • GC는 더 이상 사용하지 않는 메모리를 해제하므로 메모리 관리를 간소화할 수 있지만 성능 예측이 어려워질 수 있다.
    Garbage Collection 작업은 오버헤드가 있어 시스템이 바쁘게 돌아가고 있을 때 실행되면 장애를 일으킬 수 있다.

참고

https://velog.io/@cedongne/OOP-C과-C의-차이데이터-메모리
https://www.guru99.com/ko/cpp-vs-c-sharp.html
https://shung2.tistory.com/925

0개의 댓글