C# vs C++

선비Sunbei·2023년 1월 8일
0

C#

목록 보기
1/18
post-thumbnail
post-custom-banner

1. 전처리기 일부 미사용

C++의 경우 .h 파일과 .cpp 파일을 #include를 이용하여 컴파일 시 전처리기의 내용을 복사 및 붙여놓기하는 작업을 했었다. C#에서는 이러한 것들이 없어졌다. #if, #endif와 같은 전처리기는 아직 존재한다.
C#에서는 대신 같은 namespace에만 있으면 외부 파일이더라도 접근이 가능하다.

2. 중간 언어가 존재한다.

Java와 비슷하게 CIL(Common Intermediate Language)가 존재하여 C#뿐만 아니라 Visual Basic 언어를 컴파일하면 CIL 바이트코드로 어느 운영체제든 가상머신을 이용하여 CIL 바이트코드로 무슨 환경이든 돌릴 수 있다.

3. 철학이 다르다.

C++은 사용자가 잘 쓸거라고 믿고 일단 모든걸 만들어놓는다. 즉, 사용자를 믿지만, C#의 경우 사용자를 믿지않고 버그가 생길 여지가 있으면 오류를 발생시킨다.

4. C++과 다르게 C#은 자료형의 크기가 고정되어 있다.


다음 사진은 C++에서 운영체제에 따른 바이트 수 이다. 보면 포인터에서 사이즈가 다른 것을 알 수 있다. 실제 16bit 컴퓨터의 경우 int형이 2byte였다. 이처럼 환경에 따라서 자료형의 크기가 다르지만, C#의 경우 컴파일하여 CIL로 만들기 때문에 가상머신을 만드는 개발자가 잘 만들어놔서 우리는 컴퓨터 환경을 쓰지않고 고정된 자료형을 사용할 수 있다.

5. C#은 상속 계층의 맨 위에 object 클래스가 존재한다.

각 객체를 효율적으로 관리하기 위해서, 혹은 다형성을 이용하기 위해서 object 클래스가 상속되어있는 형태이다. (C++은 미존재)

6. character 자료형의 데이터 크기

c++의 경우 char은 1byte, C#의 경우 char은 2byte이다.
C++의 경우 ASCII를 사용하여 문자를 사용하는 반면 C#은 UTF-18 즉, 유니코드로 영어뿐만 아니라 한국어 또한 지원한다.

7. pointer가 존재하지 않는다.

8. C++의 struct는 또 다른 class이지만, C#의 struct는 힙에 할당할 수도 없고, 상속 관계에 사용할 수 없다.

c#의 struct의 기본 접근제어자는 private이라 접근제어자 정의 또한 필요하다. (C++에서는 기본 접근제어자는 public이다.)
new로 할당해도 스택에 할당된다는데 이해는 되지않는다.

9. C#의 class는 단일 상속만 허용된다.

C++의 경우 다중 상속이 가능하지만, C#의 경우 단일 상속만 가능하다.
다만, Interface같은 abstract class의 경우 추가적으로 상속이 가능하다.

10. C#에서 함수 매개 변수 선언시에 값 매개 변수 외에 참조 매개변수(ref 키워드), 출력 매개변수(out 키워드)를 지정할 수 있다.

11. C#에서는 초기화되지 않은 지역 변수를 사용하려고 하면 컴파일러 에러가 발생한다.

12. 가상함수와 순수 가상함수를 나타내는 키워드를 분리했다.

가상함수는 virtual , 순수 가상함수는 abstract 키워드를 사용한다.
또 자식 클래스의 가상함수에는 override를 해야 한다.

13. 클래스의 event 멤버는 signal/slot 기능을 언어 수준에서 제공해준다.

event는 delegate를 이용하여 event 멤버를 정의하면 +=, -=을 이용하여 이벤트를 등록하고 제거할 수 잇다.

해당 글을 바탕으로 개인적으로 알고있는 내용을 첨삭했습니다.
출처 : https://itpassion.tistory.com/entry/C%EC%99%80-C%EA%B0%84%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

post-custom-banner

0개의 댓글