메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

비슷해 보이지만 서로 다른 프로그래밍 언어 C, C++, C#의 차이

한빛미디어

|

2023-05-11

|

by 박상현

16,293

C와 C++그리고 C#은 비슷해 보이지만, 서로 다른 프로그래밍 언어입니다. 세 언어의 차이를 요약하면 C는 절차적 프로그래밍 언어이고 C++는 객체 지향 프로그래밍 언어이며 C#은 Windows 애플리케이션용 기능을 갖춘 객체 지향 프로그래밍 언어입니다.

 

 

언어 유형 개발 연도 주요 용도 특징
C 절차 지향 언어 1972 시스템 프로그래밍,
임베디드 시스템
저수준 메모리 조작,
속도, 효율성
C++ 객체 지향 언어 1983 게임, 과학 시뮬레이션,
운영 체제, 블록체인
클래스, 상속,
다형성, 템플릿
C# 객체 지향 언어 2000 Windows 데스크톱 애플리케이션,
게임, 웹 애플리케이션
가비지 수집, 유형 안전성,
사용하기 쉬운 구문

  
  

 


✅C 언어

C 언어는 1972년 탄생했습니다. 데니스 리치(Dennis Ritchie)가 유닉스(UNIX), 운영체제의 일종 시스템에 사용하기 위해 켄 톰슨(Ken Thompson)이 만든 B 언어를 발전시켜서 만든 언어입니다. 1969년에 개발된 초기 유닉스는 대부분 어셈블리어로 작성되어 컴퓨터의 하드웨어가 바뀌면 새로 개발해야 하는 문제가 있었습니다. 이런 불편을 해결하고자 데니스 리치는 하드웨어에 상관없이 사용할 수 있는 C 언어를 만들었습니다.

 

C언어는 세 가지 특징이 있습니다. ①언어는 시스템 프로그래밍이 가능합니다. 운영체제를 개발할 목적으로 만든 언어이므로 하드웨어를 제어하는 시스템 프로그래밍이 가능합니다.

 

②이식성을 갖춘 프로그램을 만들 수 있습니다. 이식성(portability)이란 기종이 다른 컴퓨터에서도 사용할 수 있는 프로그램으로, 표준을 지켜 만들면 컴퓨터의 종류가 바뀌더라도 같은 프로그램을 계속해서 활용할 수 있습니다. 표준에 정의되지 않은 문법을 사용한 프로그램은 특정 컴파일러에서만 컴파일될 가능성이 높으므로 이식성을 유지하기 힘듭니다.

 

③함수를 사용하여 개별 프로그래밍이 가능합니다. 무엇보다 함수를 사용하여 기능별로 프로그래밍이 가능하므로 개발 과정에서 에러를 수정하기 쉽고 개발된 후에도 프로그램의 유지보수에 도움이 됩니다. 물론 잘 만들어진 함수는 새로운 프로그램의 개발에 재활용할 수 있습니다.

 

 

 

✅C+1 == C++

C++는 AT&T 벨 연구소(C와 출신이 같습니다)의 비야네 스트롭스트룹(Bjarne Stroustrup) 교수가 객체지향 프로그래밍이 가능하도록 C를 개선시킨 프로그래밍 언어입니다. ‘C++’에서 ++는 자기 자신을 1만큼 증가시킨다는 뜻으로, C 언어에서 사용되는 연산자입니다. 즉, C++는 C를 향상시킨 프로그래밍 언어라는 의미를 가지고 있습니다.

 

C++과 C는 매우 다릅니다. 물론 C++가 C를 그 일부를 포함하고 있으며 기본적인 문법도 같이 때문에 비슷해 보이긴 합니다. C는 프로그램이 실행되는 순서를 중요하게 생각하는 절차 지향 언어이고 C++은 어떤 프로그램 모음(객체)을 조합해서 실행하는 객체 지향 언어입니다. 객체 지향 프로그래밍을 지원해 프로그래머가 거대하고 복잡한 소프트웨어를 이전보다 쉽게 만들 수 있도록 했습니다. 이러한 매력 때문에 C++는 많은 프로그래머에게 지금도 인기 있으며 포토샵, 윈도우, 마이크로소프트 오피스를 비롯한 많은 상용 소프트웨어가 바로 C++로 작성됐습니다.

 

 

 

✅더 나은 세상을 위한 C#

++ 밑에 ++를 더 붙이면 #이 됩니다. C#이라는 이름은 C++를 계승한다는 의미로 붙여진 것입니다. 하지만 C#은 C나 C++와는 여러 면에서 차이가 있습니다. 우선 C와 C++가 AT&T 벨 연구소에서 출생한 반면, C#은 마이크로소프트의 앤더스 헤일스버그(Anders Hejlsberg)가 만들었습니다. C 언어로 작성된 소스 코드는 C++ 컴파일러가 컴파일할 수 있지만, C나 C++로 작성된 소스 코드는 C#에서 컴파일 되지 않습니다. 이름은 비슷하지만 실제로는 완전히 다른 언어입니다.


1990년대 말, 마이크로소프트는 .NET(‘닷넷’이라고 읽습니다) 비전을 발표했습니다. 이 비전을 요약하자면 앞으로의 인터넷 서비스는 모든 종류의 기기에서 사용할 수 있어야 하며, 마이크로소프트의 .NET은 이를 위한 플랫폼이라는 것이었습니다. 하지만 마이크로소프트가 .NET을 위해 준비한 것 중 대부분은 사람들의 별다른 관심을 끌지 못했습니다. 엄청난 투자를 생각하면 사업적인 면에서는 실패했다고 평해도 틀린 말은 아닐 것입니다.


하지만 .NET은 프로그래머들에게 소중한 선물을 안겨줬는데, 바로 .NET 클래스 라이브러리와 C# 프로그래밍 언어입니다. .NET 클래스 라이브러리는 콘솔, 데스크톱, 웹, 모바일 등에서 동작하는 애플리케이션을 손쉽게 개발할 수 있는 API를 제공합니다. C# 프로그래밍 언어는 .NET에 최적화된 언어로서 프로그래머의 생산성을 보다 높은 수준으로 끌어올렸습니다. .NET 클래스 라이브러리는 C# 외에도 다양한 언어를 통해 사용할 수 있습니다. 베이직, 포트란, 코볼, 파이썬 등은 물론이고 C++도 예외는 아닙니다. 그런데 C++ 같이 훌륭한 언어로 .NET클래스 라이브러리를 활용할 수 있는데 왜 C#을 새로 만들어야 했을까요?


굳이 십자 드라이버를 쓰지 않고도 일자 드라이버로 십자 나사를 조일 수는 있습니다. 하지만 십자 드라이버를 쓰는 것과 일자 드라이버를 쓰는 것은 나사를 조일 때 필요한 힘의 크기에서 차이가 납니다. 십자 드라이버는 나사를 조이는 데 필요한 힘을 네 방향으로 분산해주지만, 일자 드라이버는 두 방향으로밖에 분산하지 못해 잘못하면 나사의 홈을 파먹거나 공구 자체가 망가질 수 있습니다. C#을 만든 이유도 마찬가지입니다. C++로도 얼마든지 .NET 클래스 라이브러리를 사용해 소프트웨어를 작성할 수 있지만, C#을 이용하면 훨씬 수월하게 할 수 있기 때문입니다.


 

비록 .NET 비전은 성공하지 못했지만 C#과 .NET은 진화를 거듭하며 프로그래머들 사이에서 자리를 잡았습니다. 그동안 많은 기능 개선과 성능 향상이 있었으며, 앞으로도 발전의 여지를 많이 남겨두고 있습니다. 게다가 C#은 파이썬을 제외하면 앞에서 소개한 어떤 언어보다 배우기가 쉽습니다.

 

 

 


 

✅C# 더 알아보기: 기본 파일과 환경 설정

컴파일러는 프로그램 논리가 담겨 있는 소스 파일을 입력받아서 프로그램, 즉 실행 파일을 만듭니다. C 컴파일러는 확장자가 .c인 소스 파일(예: Hello.c)을 입력받고, 자바 컴파일러는 확장자가 .java인 소스 파일(예: Hello.java)을 입력받습니다. 마찬가지로, C# 컴파일러는 확장자가 .cs인 소스 파일(예: Hello.cs)을 이용해서 실행 파일을 만듭니다.

 

 

C#의 기본 파일과 환경 설정.png

 

 

 

프로그램 하나를 위해 여러 개의 소스 파일을 작성할 텐데, 소스 파일이 늘어나면 관리하기가 조금 복잡할 수 있습니다. 다행히 비주얼 스튜디오는 복수의 소스 파일과 기타 부속 정보를 함께 묶어 관리할 수 있는 ‘프로젝트(Project)’라는 개념이 있습니다. 프로젝트를 C# 프로그램 개발을 위한 기본 단위라고 생각해도 좋습니다. 다음 그림에서 보는 것처럼, C# 프로젝트 파일의 확장자는 .csproj입니다.

 

 

C# 프로젝트.png

 

 

“MainApp.cs 파일은 C# 소스 코드일 테고, Hello.csproj는 프로젝트 파일이라는 건 알겠어요. 확장자가 .sln인 파일도 보이는데 이 파일도 C# 프로그래밍과 관련이 있나요?”

 

라는 질문을 하실 수도 있을텐데요, 확장자 .sln은 C#프로그래밍과 관련이 있습니다.C# 소프트웨어 개발 도구인 비주얼 스튜디오는 한 걸음 더 나아가 관련 프로젝트 여러 개를 함께 관리할 수 있는 단위도 고안했습니다. 이것을 ‘솔루션(Solution)’이라고 합니다. 

 

 

C# 프로젝트 구조.png

 

 

 

 

 



위 콘텐츠는 『혼자 공부하는 C언어』, 『이것이 C++이다』, 『이것이 C#이다(3판)』을 재구성하여 작성되었습니다.

이것이C#다_입체표지 (2).png

 

 

 

 

댓글 입력
자료실