본문 바로가기
언어(C, C++, C#)

C# vs C++

by 적용1 2024. 11. 2.
728x90

메모리 관리(GC)

C++의 경우에는 포인터를 사용하여 메모리 할당 및 해제와 같이 메모리를 직접 제어하는 반면, C#은 Mark and Sweep 알고리즘을 기반으로 둔 가비지 컬렉터를 사용하여 자동으로 메모리를 관리한다.

 

이로 인해 C++에서의 생성 - 소멸 주기보다는 C#의 오버헤드가 크기 때문에 속도가 느려질 수 있다.

구문

C++과 C#은 서로 다른 구문을 사용한다.

 

C++은 C와 유사한 구문을 사용하는 저수준 언어이고, C#은 Java와 유사한 구문을 사용하는 고수준 언어이다. 위에서 말했듯이, C++은 개발자가 직접 메모리로 작업할 수 있고, C#은 가비지 컬렉션 시스템을 이용하여 메모리 관리를 추상화한다.

 

또한, C#에는 문자열 조작 및 파일 I / O와 같은 일반적인 작업을 간소화하는 풍부한 라이브러리와 프레임워크가 포함되어 있다.

유형 안전

C#은 컴파일 타임과 런타임에 엄격한 유형 검사를 하는 강력한 유형 언어이다. 하지만 C++은 유연성은 높지만 더 많은 오류가 발생할 수 있는 약한 유형 언어이다.

 

C#은 제네릭을 지원하므로 재사용 가능한 코드로 유형 안전 프로그래밍을 할 수 있다.

C++은 제네릭과 유사하지만 그보다 유형 안전성이 덜한 template를 지원한다.

(template : 중복되는 자료형에 대해 코드를 중복시키지 않고 일반화할 수 있는 기능, 템플릿 특수화를 통해 특정 타입에 대해서는 다른 식으로 동작하게 만들 수 있는데 vector가 템플릿 특수화의 좋은 예시라고 할 수 있다.)

 

이 template에 대해서는 다시 한 번 정리할 예정이다.

플랫폼 지원

C#은 주로 여러 운영체제에서 C# 프로그램을 실행할 수 있는 공통 런타임 환경을 제공하는 .NET 플랫폼에서 사용된다.

(공용 런타임 환경(Common Language Runtime(CLR)) : .NET 플랫폼에서 제공하는 고유한 실행 환경으로, 개발자가 더 쉽게 프로그램을 개발하고 실행할 수 있도록 도와준다.)
(관련 정리 글 : https://jeokyong-development.tistory.com/61)

 

C++은 특정 하드웨어 및 운영체제에 맞게 컴파일할 수 있는 (C#에 비해)네이티브 언어이다.

 

네 줄 요약

1. C++은 메모리를 직접 관리하는 반면, C#은 가비지 컬렉터를 이용하여 메모리 관리를 간소화할 수 있다. 대신 C#이 가비지 컬렉터의 오버헤드로 인해 속도가 느릴 수도 있다.

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

3. C#은 유형 안전성을 강화하는 강력한 유형 언어인 반면, C++은 보다 유연하게 사용할 수 있는 약한 유형 언어이다.

4. C#은 주로 .NET 플랫폼에서 사용되고, C++은 특정 하드웨어 및 운영체제용으로 컴파일할 수 있는 네이티브 언어이다.

 

 

+++++)

C++에서의 string은 주소의 나열이지만, C#에서의 string은 객체이다.

C#에서의 string은 immutable(불변)성을 가지고 있다. 따라서, string에 대한 연산(+=, -=)을 하게 되면 이전의 객체에서 복사 후 연산을 한 뒤에 이를 대입해주므로 이전의 객체는 가비지가 되어 GC에게 정리를 당한다.

 

이 부분은 C#이 C++보다 멀티스레딩 환경에서 동기화 문제를 덜 발생하게 한다고 볼 수 있는데, 그 이유는 C#에서는 string 객체를 복사해서 따로 작업을 해주고 넣어주기 때문에 다른 스레드가 해당 객체를 건드려도 서로 다른 객체를 이용하여 작업하게 되는 것이지만, C++은 그런 것이 없기 때문이다.

 

출처 : https://www.simplilearn.com/tutorials/cpp-tutorial/c-sharp-vs-cpp

728x90

'언어(C, C++, C#)' 카테고리의 다른 글

[C#] this  (2) 2024.11.05
[C#] object와 var  (0) 2024.11.04
[C#] C#의 Collection  (0) 2024.11.04
[C++] C++의 STL  (0) 2024.11.03
[CS] 크래프톤 정글(혼자 공부) - GC(Garbage Collection)  (1) 2024.04.16