아주 기초적인 수준에서 보자면, C#과 C++의 코드는 비슷합니다. 물론 C#이 더 나중에 나온 것이긴 합니다. C#은 마이크로소프트가 자바(Java)에 맞서기 위해서 2000년대에 내놓은 것입니다. C++은 다른 수많은 언어들을 위한 기초 언어의 역할을 해왔으며, 1980년대에 세상에 처음 나왔습니다. 그렇기 때문에 애플리케이션을 개발하는 데 있어서는 C#이 훨씬 더 많이 사용되고 있습니다.
C++과 C#은 모두 객체지향 프로그래밍(OOP) 언어입니다. 참고로 둘 중에서는 C++이 더 사용하기 어렵다는 평가가 많습니다. 두 언어 모두 데스크톱 애플리케이션은 물론 웹 애플리케이션에서도 사용될 수 있지만, 현재는 양쪽 모두에서 C#이 훨씬 더 많이 쓰이고 있습니다. C++은 게임이나 운영체제, 그리고 PC나 서버에 있는 하드웨어를 제어하는데 필요한 아주 기초적인 수준의 프로그래밍에서 많이 사용되며, 그렇기 때문에 더 권위 있는 언어로 인식되고 있습니다.
만약에 여러분이 만들고자 하는 것이 웹이나 데스크톱에서 실행되는 간단한 애플리케이션이고, 개발자들이 직접 언어를 선택할 수 있는 권한이 주어진다면, 그들은 대부분 여러분에게 C#을 선택하라고 추천할 것입니다. 컴퓨터의 하드웨어를 직접 제어해야 한다거나 C#을 이용하는 것이 효율적이지 않은 애플리케이션을 개발해야 한다면, 개발자들은 여러분에게 C++을 추천할 가능성이 높습니다.
C# VS C++, 비슷한 점은 뭐가 있을까?
C#도 C++과 마찬가지로 C 기반의 언어이기 때문에, 두 언어의 문법은 기본적으로 비슷합니다. 개발자들이 괄호 “{}”를 사용해서 코딩의 구조를 함수 단위로 나누는 것이나, 종속성이나 라이브러리라는 개념을 사용하는 객체지향 언어라는 것도 매우 비슷하죠. 개발자가 자바나 C++에 익숙한 사람이라면 C#에 적응하는 것이 어렵지 않습니다. 하지만 C# 개발자가 C++에 적응하는 것은 더 어려운데, 그 이유는 C++이 훨씬 더 기초적인 수준의 언어이기 때문입니다. C#은 오버헤드의 상당 부분을 직접 처리하지만 C++은 신경 써서 처리해야 하는 부분입니다. 이런 점이 C++이라는 언어를 더 어렵게 느껴지게 만드는 이유이기도 합니다. C#은 자바(Java)와 경쟁하기 위해서 만들어진 것이기 때문에, 자바와 훨씬 더 비슷하지만 다음과 같은 부분에 있어서는 C++과 비슷한 점이 있습니다.
◆ 객체지향
: 문법이 조금 다르긴 하지만 클래스(class), 상속(inheritance), 다형성(polymorphism)이라는 개념은 같습니다.
◆ 컴파일 언어
: 인터프리터(interpreter) 방식인 자바와는 다르게 C#과 C++은 컴파일(Compile)을 해야 하는 언어입니다. 즉, 애플리케이션을 PC나 서버에서 실행하기 위해서는 (인간의 언어와 비슷하게 작성한) 코드를 컴파일 해서, 컴퓨터가 이해할 수 있는 바이너리(binary) 코드로 바꿔줘야 한다는 뜻입니다. C++이나 C#으로 작성된 이후에 컴파일 과정을 거친 대표적인 예는, 여러분이 컴퓨터에서 실행할 수 있는 ‘.exe’ 확장자를 가진 파일들이 있습니다.
C# VS C++, 다른 점은?
C++과 C#이 비슷한 언어라고 하기 힘든 이유는, 이 두 언어가 비슷한 점보다는 다른 점이 훨씬 더 많기 때문입니다. 겉으로 보이는 문법만 비슷한 것이지, 그 이면까지 비슷하다고 보기는 어려운데요. 두 언어의 다른 특성들로는 다음과 같은 점들이 있습니다.
◆ 바이너리(binary)의 크기
: 앞에서도 언급했듯이, 두 개의 언어는 코딩한 내용을 컴파일 해서 바이너리 파일로 바꿔야 합니다. C#에는 컴파일을 하면서 수많은 오버헤드와 라이브러리가 함께 포함됩니다. 그에 비해 C++은 훨씬 더 가볍습니다. 그래서 컴파일을 하고 나면, C++에 비해서 C#으로 작성된 바이너리의 크기가 훨씬 더 커지게 됩니다.
◆ 성능
: C++은 고급 언어들이 효율적이지 않은 경우에 많이 사용됩니다. C++의 코드는 C#의 코드보다 훨씬 빠르기 때문에, 성능이 중요한 애플리케이션인 경우에는 C++을 사용하는 것이 더 좋습니다. 예를 들어서 네트워크 분석 소프트웨어의 경우에는 C++ 코드로 작성되는 것이 훨씬 좋은 반면에 일반적인 워드 프로세서와 같은 애플리케이션은 C#으로 작성된다고 하더라도 성능에서는 그다지 문제가 발생하지 않습니다.
◆ 가비지 컬렉션(Garbage collection)
: 가비지 컬렉션이란 시스템에서 낭비되는 메모리 자원을 회수하는 작업입니다. C#을 사용한다면 가비지 컬렉션을 크게 신경 쓰지 않아도 됩니다. C++을 사용한다면, 자동적으로 가비지 컬렉션이 수행되지 않기 때문에, 여러분의 객체가 사용하는 메모리를 직접 할당하고 해제해 주어야 합니다.
◆ 타깃 플랫폼
: 마이크로소프트가 C# 프로그램을 다른 플랫폼에서도 사용할 수 있게 하기 위해서 노력하고 있기는 하지만, C#으로 만든 프로그램들은 주로 윈도우(Window) 운영체제를 겨냥해서 만들어집니다. 반면에 C++을 사용하면, 맥, 윈도우, 그리고 리눅스(Linux) 등 어떤 플랫폼에서도 구동할 수 있게 프로그램을 코딩할 수 있습니다.
◆ 프로젝트의 유형
: C++ 프로그래머들은 주로 하드웨어를 직접 제어하는 애플리케이션이나 다른 언어를 사용할 때보다 더 뛰어난 성능이 필요한 어플리케이션 작업을 많이 합니다. C++ 프로그램들은 서버 애플리케이션, 네트워킹, 게임, 그리고 여러분의 PC에 있는 장치 드라이버에서도 사용되고 있습니다. C#은 일반적으로 웹, 모바일, 데스크톱 애플리케이션에서 사용됩니다.
◆ 컴파일러 경고
: C++에서는 문법적으로 틀리지만 않는다면 거의 모든 작업을 수행할 수 있습니다. 그래서 유연성을 가진 언어이긴 하지만, 컴퓨터에서 실제로 피해를 일으킬 수도 있습니다. C#은 훨씬 더 보호체계를 잘 갖추고 있어서, C++에서라면 허용될 수도 있는 심각한 에러들을 허용하지 않고, 컴파일러가 에러를 표시해서 경고를 해줍니다.
내 개발 프로젝트에는 어떤 언어를 선택해야 할까?
일반적으로 웹이나 데스크톱 애플리케이션을 만드는 프로젝트에서는 C#과 같은 고급 언어를 사용하라고 추천하는 경우가 많습니다. C#은 닷넷(.NET.) 프레임워크의 일부이기도 한데, 닷넷은 특별히 웹 개발을 염두에 두고 만들어진 프레임워크이긴 하지만, 윈도우 기반의 프로그램과도 쉽게 호환될 수 있습니다. 마이크로소프트에서는 이 언어를 리눅스(Linux) 시스템으로 포팅(porting) 하기 위해서 노력을 하고 있기는 하나, 그래도 C#은 윈도우 환경에서 가장 잘 구동되는 언어입니다.
C++은 플랫폼이나 지향하는 애플리케이션이라는 면에서 보자면 활용할 수 있는 분야가 더 많기는 하지만, 개발자들의 수가 많지는 않은 편입니다. 웹이나 모바일 애플리케이션을 제작하는 용도로는 잘 사용되지 않기 때문입니다. 여러분의 프로젝트가 아주 기초적인 수준의 프로세스를 처리해야 한다면, 여러분은 C++ 개발자가 필요할 것입니다. 그리고 속도와 성능이 중요한 서버용 소프트웨어를 개발할 때도 C++을 사용할 수 있습니다. 결론적으로 말해서, C#보다는 C++이 훨씬 더 많은 곳에서 사용할 수 있기는 하지만, C++을 사용하는 것이 언제나 비용 대비 효율적인 방법은 아닙니다.
출처:
'IT용어' 카테고리의 다른 글
JSON(JavaScript Object Notation), BSON(Binary JSON) (0) | 2020.10.12 |
---|---|
IT Infra Architecture(인프라 아키텍처) (0) | 2020.09.14 |
kubernetes란? (0) | 2020.06.09 |
DOCKER 1 (0) | 2020.06.09 |
멀티쓰레드(Multi Thread) (0) | 2020.05.15 |
댓글