C 언어
C 언어는 1972년 미국 벨 연구소의 데니스 리치(Dennis Ritchie)가 개발한 범용 프로그래밍 언어입니다.
오늘날의 프로그래밍 언어들(Java, C++, C#, Python)에 큰 영향을 끼쳤으며, 지금도 널리 사용되는 강력한 언어입니다.
운영체제 개발을 목적으로 만들어졌으며, 특히 유닉스(UNIX) 운영체제를 구현하는 데 핵심적으로 사용됩니다.
C언어 특징
1. 효율성
- 같은 기능 구현시에 다른 프로그래밍 언어에 비해 소스 파일의 크기가 작고 실행 속도가 빠릅니다.
2. 이식성
- 하드웨어에 의존적이지 않아 한 번 작성한 코드를 여러 운영체제나 플랫폼에서 사용 가능합니다.
3. 포인터 지원
- 메모리 주소에 직접 접근이 가능합니다.
4. 빠른 실행 속도
- 컴파일 언어이기 때문에 인터프리터 언어(Python 등)보다 훨씬 빠르게 동작합니다.
5. 구조적 프로그래밍
- 함수 단위로 코드를 나누어 작성할 수 있어, 유지보수와 가독성이 뛰어납니다.
인터프리터 언어란?
소스 코드를 한 줄씩 읽어 바로 실행하는 프로그래밍 언어를 뜻합니다.
별도의 컴파일 과정없이 번역과 실행이 동시에 이루어집니다.
대표적인 인터프리터 언어로 Python, JavaScript, R 등이 있습니다.
C++
C++은 덴마크의 비야네 스트롭스트룹(Bjarne Stroustrup)이 개발한 프로그래밍 언어입니다.
C 언어를 기반으로 객체지향 프로그래밍(OOP)을 지원하도록 확장한 언어입니다.
C의 성능과 효율성에 객체지향 개념이 추가되어, 대규모 소프트웨어 개발에 적합합니다.
C++ 특징
1. C 언어의 상위 호환 및 높은 호환성
- 기존 C 언어의 문법과 구조를 대부분 계승하여 C 언어로 작성된 프로그램을 쉽게 가져와 사용할 수 있습니다.
2. 객체지향 프로그래밍(OOP) 지원
- 상속, 추상화, 캡슐화, 다형성 등의 객체 지향 개념을 통해 코드를 재사용하고 관리하기 편리합니다.
3. 고성능 및 효율성
- 하드웨어에 가까운 저수준 메모리 접근이 가능하여 성능이 중요한 시스템에서 효율적인 프로그램 개발이 가능합니다.
4. 범용성
- 게임 엔진, 운영 체제, 임베디드 시스템 등 광범위한 분야에서 활용됩니다.
객체지향 프로그래밍(OOP)
객체 및 이들간의 관계, 상호작용 등을 기반으로 프로그램을 설계하는 방법론입니다.
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라 프로그램을 수많은 객체라는 기본 단위로 나누고
이들의 상호 작용으로 서술하는 방식입니다.
여기서의 객체란 '메서드', '변수' 를 가지며 특정 역할을 수행하도록 인간이 정의한 추상적인 개념입니다.
C#
C#은 마이크로소프트에서 개발한 객체 지향 프로그래밍(OOP)언어 입니다.
닷넷(.NET) 프레임워크를 기반으로 웹, 모바일, 게임 등 다양한 어플리케이션을 개발하는데 사용됩니다.
C# 특징
1. 객체 지향 프로그래밍(OOP)
- 객체 지향의 특징을 이용해 코드의 요지보수가 편리합니다.
2. 메모리 관리 자동화
- 메모리가 자동으로 해제됩니다.
3. 플랫폼 독립성
- 닷넷(.NET) 플랫폼을 통해 다양한 디바이스에서 실행되는 앱을 개발할 수 있습니다.
4. 타입 안정성
- 변수의 데이터 타입을 엄격하게 관리합니다.
C, C++, C# 차이점
| 구분 | C | C++ | C# |
| 패러다임 | 절차지향 언어 | 객체지향 + 절차지향 혼합 | 객체지향, 현대적 언어 |
| 메모리 관리 | 개발자가 직접 관리 | 직접 관리 + 스마트 포인터 지원 | 자동(가비지 컬렉터) |
| 하드웨어 제어 | 저수준 제어 가능 | 저수준 + 고수준 제어 가능 | 주로 고수준 제어 |
| 주 사용 분야 | OS, 임베디드, 시스템 소프트웨어 |
게임 엔진(Unreal), 그래픽 | 게임(Unity), 웹 |
| 플랫폼 | OS 종속적 (이식성 높음) | 다양한 플랫폼 지원 | .NET, 크로스 플랫폼 |
| 언어적 특징 | 단순, 빠름, 구조적 | C 기반 확장, 템플릿, 객체지향 |
객체지향, 강력한 라이브러리, 현대적 |
C 언어는 절차 지향 프로그래밍 언어로 가장 하드웨어에 가깝게 작동합니다.
그만큼 메모리 관리가 용이하고 저수준 제어가 가능해 빠르고 효율적인 개발이 가능하며 이식성이 뛰어납니다.
C++은 C 언어에서 객체 지향 프로그래밍 기능을 확장한 것으로 C의 성능을 계승하면서도 객체 지향의 장점을 활용할 수 있으며
최적화에 용이합니다. 고성능 게임 엔진(Unreal), 임베디드 시스템, 금융 어플리케이션 등의 성능이 중요한 분야에서 널리 사용됩니다.
C#은 현대적인 객체 지향 프로그래밍 언어로 마이크로소프트사에서 개발한 언어입니다.
.NET 환경에서 동작하며, 생산성과 편의성을 추구하여 게임 개발(Unity), 웹/앱 개발에 널리 사용됩니다.
또한 크로스 플랫폼 사용에 용이하다는 장점이 있습니다.
C# 과 C++의 컴파일 과정 차이
C++은 네이티브 코드 기반 언어이기 때문에, 컴파일 시점에 바로 실행 가능한 기계어로 변환합니다.
C#은 .NET 기반 언어이므로, 네이티브 코드로 변환하는 과정 중간에 IL(Intermediate Language) 즉 중간언어로 변환하는 과정을 거칩니다.
C++의 컴파일 과정
1. 소스 코드 작성 (.cpp)
2. 전처리 (Preprocessing) : #include, #define 과 같은 전처리 지시문 처리
3. 컴파일 (Compile) :c++ 컴파일러가 기계어로 변환된 오브젝트 파일 생성
4. 링킹 (Linking) : 여러 개의 오브젝트 파일 + 라이브러리를 묶어서 실행 파일(.exe) 생성
5. 실행 : 운영체제가 네이티브 코드 실행
C#의 컴파일 과정
1. 소스 코드 작성 (*.cs 파일)
2. C# 컴파일러가 *.cs 파일을 컴파일
3. 컴파일의 결과물로 *.exe나 *.dll 형식 파일이 나옴
(* 바로 실행 가능한 파일이 아닌 CIL(Common Intermediate Language)로 중간 언어이다)
4. *.exe 파일 실행
5. 파일 실행을 위해 CIL 코드가 CLR 내부의 Class Loader에 의해서 CIL 클래스들의
레이아웃 로드와 메타데이터 및 사용된 클래스 라이브러리 등을 로드하여 각종
과정을 거친 뒤 메모리에 로드
6. JIT 컴파일러(Just-in-time)를 통해 메모리에 올라간 CIL 코드를 컴퓨터가 이해할 수 있는
기계어(native code)로 변환
변환된 기계어는 메모리에 캐싱하여 다음 호출 시 재사용이 가능
7. 프로그램 동작
'개발, IT > C#' 카테고리의 다른 글
| [유니티 / C#] 비주얼 스튜디오 유용한 단축키 (0) | 2025.09.04 |
|---|---|
| [유니티 / C#] readonly와 const (0) | 2025.09.03 |
| [유니티 / C#] CLR(Common Language Runtime) 알아보기 (0) | 2025.09.03 |
| [유니티 / C#] DivideByZero 예외처리 (0) | 2025.09.03 |
| [유니티 / C#] 부동소수점의 원리 (0) | 2025.09.03 |