1222 단어
6 분
C, C#, C++의 차이
작성중
먼저 표로 한눈에 이해한 다음에 설명을 하도록 하겠습니다.
| 항목 | C | C++ | C# |
|---|---|---|---|
| 개발 연도 | 1972년 | 1985년 | 2000년 |
| 개발자 | 데니스 리치 | 비야네 스트롭스트룹 | 마이크로소프트 |
| 언어 유형 | 절차적 언어 | 객체지향/절차적 혼합 언어 | 객체지향 언어 |
| 플랫폼 | 플랫폼 독립적 (C 컴파일러 필요) | 플랫폼 독립적 (C++ 컴파일러 필요) | 주로 .NET 플랫폼 (크로스 플랫폼도 가능) |
| 메모리 관리 | 수동 메모리 관리 | 수동 메모리 관리 | 가비지 컬렉션 (자동 메모리 관리) |
| 포인터 사용 | 포인터 사용 가능 | 포인터 사용 가능 | 제한된 포인터 사용 (주로 비권장) |
| 객체지향 지원 | 미지원 | 지원 (절차적+객체지향 혼합) | 완전한 객체지향 프로그래밍 지원 |
| 언어 복잡도 | 단순함 | 중간 복잡도 | 복잡함 (많은 라이브러리와 기능) |
| 성능 | 매우 빠름 | 빠름 | 상대적으로 느림 (가비지 컬렉션 때문) |
| 메모리 접근 | 저수준 메모리 접근 가능 | 저수준 메모리 접근 가능 | 고수준 메모리 접근, 제한적 저수준 접근 |
| 주요 용도 | 시스템/임베디드 프로그래밍 | 시스템, 게임, 애플리케이션 개발 | 비즈니스 애플리케이션, 웹, 게임 등 |
| 다중 상속 | 미지원 | 지원 | 미지원 (인터페이스 다중 구현만 가능) |
| 예외 처리 | 미지원 | 지원 | 지원 |
| 문법적 특징 | 단순하고 직관적 | C 기반 + 객체지향 문법 추가 | C++, 자바의 문법 혼합, 더 직관적 |
C
먼저 C언어부터 알아보도록 하겠습니다. 왜냐하면 3가지 중 가장 오래되고 가장 널리 사용되었기 때문입니다. 데니스 리치라는 사람이 1972년에 C언어를 개발하였고 1978년에 발표하였습니다.
- 역사: 가장 오래된 언어로 1972년에 개발됨. 유닉스 운영체제를 개발할 때 사용되었음.
- 특징:
- 절차지향적 언어로 설계되어 모든 것이 함수로 이루어짐.
- 저수준 메모리 접근이 가능하여 시스템 프로그래밍, 임베디드 시스템 등에 적합.
- 포인터를 사용하여 메모리 관리를 직접 할 수 있음.
- 다소 단순한 구조로 매우 빠른 성능을 제공하지만, 메모리 관리 및 버퍼 오버플로우와 같은 문제가 발생할 수 있음.
C++
- 역사: C 언어에 객체지향 개념을 추가하여 1985년에 개발됨.
- 특징:
- C의 모든 기능을 상속받았으며, 객체지향 프로그래밍(OOP)을 지원하여 더 복잡한 애플리케이션을 쉽게 개발할 수 있음.
- 다중 상속을 지원하여 하나의 클래스가 여러 부모 클래스를 상속받을 수 있음.
- 여전히 포인터와 저수준 메모리 관리를 제공하지만, C보다 더 많은 고수준 기능이 추가됨 (예: STL, 클래스).
- 템플릿 기능으로 코드 재사용성을 높이고 제네릭 프로그래밍을 지원함.
- 게임 개발, 시스템 소프트웨어, 성능이 중요한 애플리케이션에서 주로 사용됨.
C#
- 역사: 마이크로소프트가 2000년에 .NET 플랫폼을 위해 개발한 언어.
- 특징:
- C++와 자바의 장점을 혼합한 객체지향 언어로 설계됨.
- 메모리 관리를 자동으로 해주는 가비지 컬렉터가 있어 개발자가 수동으로 메모리를 관리하지 않아도 됨.
- 포인터 사용이 제한적이며, 보통은 메모리 관리를 개발자가 직접 할 필요가 없음.
- LINQ와 같은 고급 기능을 제공하여 데이터를 처리하는 작업이 매우 간결함.
- 주로 .NET 환경에서 웹 애플리케이션, 윈도우 애플리케이션, 게임(Unity 사용) 개발에 사용됨.
- 크로스 플랫폼을 지원하는 .NET Core를 통해 윈도우뿐만 아니라 리눅스와 맥에서도 실행 가능.
주요 차이점 요약
- C 는 매우 기본적이고 빠른 언어로, 시스템 프로그래밍과 같은 저수준 작업에 적합.
- C++ 는 C의 확장으로, 객체지향 프로그래밍과 제네릭 프로그래밍을 통해 더 복잡한 애플리케이션을 개발할 수 있음.
- C# 은 자동 메모리 관리, .NET 통합, 더 직관적인 문법을 제공하며, 고수준 애플리케이션 개발에 많이 사용됨.
