1. C 언어
C언어는 Dennis Ritchie가 1970년대 초에 설계한 고급 프로그래밍 언어로, 컴퓨터 시스템과 하드웨어와의 저수준 통신을 제공하며, 현대 컴퓨팅 언어의 중추적 역할을 합니다.
- 특징:
- 절차적 프로그래밍 언어 (구조적 프로그래밍)
- 저수준 언어와 고수준 언어의 장점을 융합
- 하드웨어와 밀접한 저수준 작업 가능 (포인터, 메모리 직접 관리)
- 성능이 뛰어나며 운영체제(OS), 시스템 소프트웨어 개발에 주로 사용
- 용도:
- 운영체제 및 임베디드 시스템 개발
- 시스템(드라이버, 펌웨어, 네트워크 프로토콜) 프로그래밍
- 성능이 중요한 애플리케이션
2. C++
C++는 Bjarne Stroustrup이 C언어를 기반으로 확장하여 1980년대에 개발한 객체지향 프로그래밍 언어입니다. C++는 C의 역량을 그대로 유지하면서, 강력한 객체지향 기능을 제공합니다.
- 특징:
- 객체지향 프로그래밍(OOP) 지원 (클래스, 상속, 다형성, 캡슐화 등)
- 제네릭 프로그래밍 지원 (템플릿 사용)
- 정적 형식 언어로 성능이 뛰어남 (C의 저수준 접근 유지)
- 메모리 관리 등에서 자유도가 높지만, 개발자가 직접 관리해야 함
- 코드 재사용과 프로그램 확장성을 강조
- 용도:
- 게임 엔진 (Unreal Engine 등)
- 그래픽 소프트웨어, 물리 엔진
- 고성능 애플리케이션 (금융, 실시간 시스템 등)
- 운영체제, 브라우저, 시스템 소프트웨어
- 차이점:
- C++는 C의 모든 기능을 포함하며 객체지향 기능이 추가됨.
- C++는 고급 기능(예: 예외처리, RAII 등)이 추가되어 개발 효율성이 높아짐.
3. C#
C#은 Microsoft에서 개발한 객체지향 프로그래밍 언어로, 2000년대 초 .NET 플랫폼과 함께 등장했습니다. C와 C++에서 영향을 받았으나, JVM(Java Virtual Machine) 기반의 Java와 유사한 높은 수준의 프로그래밍 모델을 제공합니다.
- 특징:
- 객체지향 프레임워크 (Java와 유사한 문법)
- CLR(Common Language Runtime)을 이용한 .NET 환경 의존
- 메모리 관리 자동화 (Garbage Collector)
- 안전한 타입 지원 및 강력한 라이브러리
- 코드 생산성을 높이는 고급 기능 제공 (LINQ, 람다 식, async/await 등)
- 용도:
- Windows 애플리케이션 (WPF, WinForms 등)
- Unity 엔진(게임 개발)
- 웹 개발 (ASP.NET)
- 모바일 애플리케이션 (Xamarin)
- 클라우드 및 분산 시스템 (.NET Core 사용)
- 차이점:
- C#은 완전히 객체지향적이며 메모리를 자동으로 관리 (Garbage Collection).
- 플랫폼 의존성을 가지며, 주로 Microsoft 생태계(.NET)에서 개발.
- 문법 디자인과 사용성이 더욱 현대적이고 초보자 친화적.
요약 비교
특징/언어CC++C#
C/C++/C# 요약 비교 | |||
특징/언어 | C | C++ | C# |
출시 연도 | 1970s 초 | 1985 | 2000 |
프로그래밍 패러다임 | 절차적 프로그래밍 | 객체지향 + 절차적 + 제네릭 | 객체지향 (완전한 OOP) |
성능 | 가장 빠름 | 빠름 | 자동 관리로 약간 느림 (App 유형과 최적화 수준에 따라 성능 차이 有) |
메모리 관리 | 수동 | 수동 | 자동 (Garbage Collector) |
플랫폼 | 하드웨어 의존 | 하드웨어 의존 | .NET 필요 (플랫폼 독립) |
주요 용도 | 시스템 프로그래밍 | 고성능 애플리케이션 | 게임, 웹, 모바일 개발 |
난이도 | 상대적으로 어렵음 | 복잡하지만 강력 | 쉽고 현대적 |
선택 가이드
- C: 성능이 매우 중요한 경우 또는 시스템/임베디드 소프트웨어를 작성하는 경우 추천.
- C++: C보다 더 많은 도구와 유연한 기능이 필요한 고성능/대규모 소프트웨어 개발에 추천.
- C#: 간단하면서 현대적이고, Microsoft 생태계에서 개발(게임, Windows 앱 등)이 필요한 경우 추천.
'Programming Language > C언어' 카테고리의 다른 글
[C언어] strtok 함수 알아보기 (문자열 자르기) (0) | 2025.04.12 |
---|---|
[C언어] 토큰(Token)이란? (0) | 2025.04.12 |
[C언어] 파일 입출력 - 읽기 (fopen, fgets, fseek, feof, fclose) (0) | 2025.03.29 |
[C언어] 중복 없이 난수를 입력 받은 개수만큼 생성하는 함수 (0) | 2024.11.09 |
[C언어] 입력 버퍼 지우는 함수 (0) | 2024.11.08 |