C#은 C# 컴파일러를 통해 CIL로 변환된다. .NET은 JIT 컴파일러를 사용해서 CIL을 OS에 맞는 기계어로 변환시킨다.
.NET Framework
정의
- Microsoft에서 개발한 플랫폼
- C# 및 다른 .NET 언어로 갭발된 응용 프로그램을 실행하는데 사용된다.
- 공통 런타임 및 클래스 라이브러리를 제공한다.
특징
- 크로스 플랫폼 지원
- .NET 5 이후의 버전은 Windows, macOS, Linux와 같은 다양한 운영체제에서 실행될수있다.
- x86, x64등 다양한 하드웨어 아키텍처 지원
- 서버, 데스크톱, 모바일 및 임베디드 장치와 같은 다양한 플랫폼에서 사용 가능
C#
정의
특징
- 객체지향 프로그래밍 언어
- 클래스와 객체를 사용해서 데이터와 동작 캡슐화
- 강력한 형식의 언어
- 강력한 형식 언어 : 데이터 유형의 안전성을 강조하고, 데이터의 타입을 엄격하게 검사해서 프로그램의 안정성을 향상시키는 언어
- 변수와 데이터 타입을 컴파일 시간에 명시적으로 선언하고 검사하는 정적 타입 언어를 지원하여 컴파일러가 코드의 안정성을 보장하고, 타입 불일치로 인한 오류를 줄인다.
- C# 컴파일러는 변수와 메서드의 사용을 엄격하게 검사한다. 잘못된 타입의 값을 할당하려고 하거나 올바르지 않은 형변환를 시도하면 컴파일 오류를 발생시킨다.
- 제너릭(Generic)을 지원해서 컴파일 시점에 타입 안전성을 제공한다.
- 이벤트 기반 프로그래밍 지원
- 이벤트 기반 프로그래밍 : 프로그램에서 발생하는 이벤트(사용자의 동작, 외부 입력등..)에 대응해서 코드를 실행하고 처리하는 프로그래밍 패러다임
- 이벤트(event)와 대리자(delegate) 제공
- 이벤트(event) : 클래스나 객체가 다른 클래스나 객체에게 어떤 상황이나 동작이 발생했을을 알리기 위한 매커니즘. 특정 조건이 충족됬다면 미리 정의된 메서드(이벤트 핸들러)를 호출하도록 설계된다.
- 대리자(delegate) : 메서드에 대한 참조를 저장하고 호출할 수 있는 형식. 이벤트 핸들러를 등록하고 호출하는데 사용된다.
- 이벤트 핸들러(event handler) : 이벤트가 발생했을 때 호출되는 메서드. 이벤트 핸들러는 대리자(delegate)를 통해 이벤트에 연결된다.
- 크로스 플랫폼 지원
- .NET 5 or .NET Core를 통해 다양한 OS로의 이식성을 제공한다.
.NET과 C#
- C# 코드는 C# 컴파일러에 의해 중간언어인 CIL(Common Intermediate Language)로 변환된다.
- CIL 코드는 플랫폼에 독립적이며 특정 플랫폼과는 무관하다.
- .NET 응용 프로그램을 실행할 때 .NET 프레임워크의 CLR(Common Language Runtime)에 내장된 JIT(Just-InTime) 컴파일러가 CIL 코드를 해당 응용프로그램이 실행되는 컴퓨터 아키텍처에 맞는 네이티브 기계 코드로 변환한다.
- 기계 코드는 프로세서에서 직접 실행된다.