본문 바로가기
프로그래밍/IT지식

[개발용어] C, C++, C# 언어의 차이점

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

C언어

C언어는 위 세가지 언어 중 가장 기본이 되는 언어이다. 가장 오래되고, 가장 널리 사용되고 있으며, 운영체제나 언어 처리계 등의 시스템 기술에 적합한 프로그래밍 언어이다.

C언어는 절차 지향 언어(procedure oriented language)이다. 즉, 함수를 이용해서 프로그램을 만들어 순차적으로 실행되는 언어라고 할 수 있다. 코드를 짠 순서대로 움직이기 때문에 메모리가 적은 곳에서도 잘 돌아가고 속도가 빠르다는 장점을 가지고 있다.

하지만, 정해진 순서대로만 움직이니 유지보수도 어렵고 한 부분에서 문제가 발생 시 전체적으로 해결해야 되는 단점이 있다.

C언어는 프로그래머가 직접 메모리에 접근, 이를 관리할 수 있다. 하지만 그만큼 세밀한 코딩이 요구되는데 이 부분을 시스템에 맡기고 쉽고 빠르게 코딩하는 것이 C#이다.

C++언어

C++는 객체 지향 언어(object oriented language)이다. 절차 지향 프로그래밍 기반 위에서 객체 지향 프로그래밍이 나타난 것이고 절차 지향 언어가 가지고 있는 단점들을 보완해주는 역할이라고 볼 수 있다. 즉 C++은 C언어에서 파생된 서로 다른 언어이다.

C++은 독립적인 객체들이 서로 상호작용을 하면서 진행되는 프로그래밍 언어로서, 가장 중요한 차이는 절차 지향은 함수, 객체 지향은 객체가 존재한다.

C언어와 C++언어의 차이점을 설명할 때 가장 대표적인 비유가 붕어빵이다.

객체를 붕어빵에 비유하면, 붕어빵을 만들기 위해서는 붕어빵 모양의 틀이 필요한데 그 틀 안에 팥, 슈크림 등 각각의 재료를 넣어 붕어빵을 만들고 이렇게 만들어진 붕어빵을 객체(object)라고 하고 붕어빵을 만드는 틀을 클래스(class)라고 한다.

붕어빵을 만드는 틀인 클래스를 이용해서 그 안에 들어가는 재료들만 바꿔서 새로운 붕어빵 즉 객체를 만드는 것이다.

C#언어

C#은 닷넷(.NET) 프레임워크를 기반으로 개발한 프로그래밍 언어이다. 일반적으로 상용 소프트웨어가 아닌 내부용 또는 기업용 애플리케이션으로 사용된다. 쉽게 말해서 닷넷(.NET) 프레임워크 내 클라이언트 및 서버 개발에 사용된다.

C#은 C++를 기반으로 비주얼베이직의 편의성을 결합하여 만든 객체 지향 언어이다. 하지만 C#은 C++보다는 자바(Java)와 비슷하다는 특징이 있다. 한마디로 비주얼 언어가 가진 사용자 친화성, C++의 객체 지향성, 자바의 분산환경처리에 적합한 다중성 등을 모두 지닌다는 특징이 있다.

C언어, C++언어, C#언어의 차이점 및 장단점

프로그램은 데이터와 명령어로 구성되며 어떤 방식으로 프로그래밍하는지에 따라 이 세 언어의 차이점이 발생한다.

C언어는 어떠한 명령어들을 어떠한 순서로 몇 번씩 실행시킬지(절차)를 결정하는 방식으로 프로그램을 만든다.

C++와 C#은 관련 있는 데이터와 명령어를 하나로 묶어 객체라는 조립 단위를 만들고, 필요한 객체들을 조립하는 방식으로 프로그램을 만든다.

C언어 vs C++언어

절차지향 vs 객체지향

 

  • 객체 사용 여부 : C언어는 입력과 출력에 함수를 사용하고, C++는 입출력에 객체를 사용한다.
  • 코드 실행 : C++는 C의 확장자로 구축되어 있기 때문에 대부분의 C코드를 실행할 수 있다. 그러나 C는 C++ 코드를 실행할 수 없다.
  • 객체 지향 특성 : C++는 객체 지향 프로그래밍 언어로 객체 지향 특성인 캡슐화, 상속, 다형성을 가지고 있다. 하지만 C언어는 이러한 특성을 지원하지 않는다.
  • 자유 개체 : C언어에서 데이터와 함수는 "자유 개체"이므로 외부코드를 사용하여 조작할 수 있다. 하지만 C++는 데이터와 함수를 단일 객체로 캡슐화하기 때문에 이러한 데이터 구조와 연산자는 외부코드에 숨겨진다.
  • 네임스페이스 : 코드 베잇스에 라이브러리가 여러 개 포함된 경우, 이름 충돌이 발생할 수 있다. C++는 네임스페이스를 사용하여 코드를 논리 그룹으로 정리하고 이름 충돌을 방지하지만 C는 사용하지 않는다.
  • 참조변수 지원 여부 : 참조 변수는 이미 존재하는 변수의 별칭으로, 더욱 빠른 코드화를 위해 짧은 표기법을 만드는 데 사용됩니다. C++는 참조 변수를 지원하지만, C 언어는 지원하지 않습니다.

C++언어 vs C#언어

객체(Object)와 컴포넌트(Component)

 

C++와 C# 모두 객체 지향 언어이지만, C#은 모든 것을 객체로 취급하기 때문에 컴포넌트 지향 언어라고도 한다는 것이다.

컴포넌트(Component)란 프로그래밍에서 재사용이 가능한 각각의 구성요소, 즉 독립된 모듈을 뜻한다. 컴포넌트 기반 프로그래밍에서는 레고 블록과 같이 이미 만들어진 컴포넌트들을 조합하여 화면을 구성할 수 있다.

객체 지향 언어는 큰 바이너리 실행 파일로 결합된 '클래스 간의 연관성'에 초점을 맞추지만, 컴포넌트 지향 언어는 자체적으로 작동하는 '교환 가능한 코드 모듈'을 사용한다는 점에서 다르다. 또한, 사용자는 이러한 코드 모듈을 사용하기 위해 내부 작업(세부사항)을 알 필요가 없다.

그 밖에도 다음과 같은 차이점이 있다.

  • C++는 본래 유닉스 기반 시스템을 위해 설계되었지만 모든 플랫폼에서 사용할 수 있습니다. 반면, C#은 표준화되었지만, Windows 환경 이외에서는 거의 사용되지 않습니다. (닷넷은 Windows에서만 설치가 가능해 다른 운영체제는 사용 불가하기 때문)
  • C++는 컴파일되어 기계코드로 직접 변환된다. 하지만 C#은 중간언어, 즉 ASP.NET에서 해석되는 CLR(공용 언어 런타임)로 컴파일된다.
  • C++에서는 메모리를 수동으로 처리해야 하는 반면, C#은 메모리 관리를 자동으로 처리할 수 있는 가상 시스템에서 실행됩니다.
  • C#과 달리, C++는 포인터를 사용할 수 있습니다.

C언어 vs C#

C언어와 C#은 기술적으로는 서로 관련이 있지만, 매우 다른 언어이기 때문에 비교하기가 어렵다. C#은 C언어, C++와는 다른 새로운 생태계로, 자바와 비슷한 것으로 평가된다. 즉 자바 & 오라클 생태계에 대응해 마이크로소프트사에서 C# & 닷넷(.NET) 생태계를 제작한 것이다. 닷넷은 윈도우에서만 사용 가능하고 다른 운영체제에서는 사용할 수 없다.