위 그림만으로도 거의 모든 설명이 가능할 듯한데, 요약하자면
1. C#은 컴파일러에 의해 Common Intermediate Language(CIL 혹은 IL, MSIL)로 컴파일된다.
2. IL은 Common Language Runtime(CLR) 상의 컴파일러에 의해 네이티브 코드로 컴파일된다.
라고 정리할 수 있다.
아래는 부연설명이다.
1.
Common Language Infrastructure(CLI)는 마이크로소프트에서 개발한 표준이다.
CLI는 다양한 요소들로 구성되어 있는데, 크게는 언어적인 요소와 시스템적인 요소로 구분할 수 있다.
.NET은 이러한 CLI의 가장 대표적인 구현체로서 각각의 요소를 IL과 CLR로 칭하고 있다.
2.
.NET을 기반으로 하는 언어들은 C#, VB, F# 등으로 매우 다양하다.
하지만 어떤 언어를 사용하든 IL로 컴파일된다는 점은 모두 동일하다.
따라서 .NET 환경은 언어에 구애되지 않는다.
3.
IL은 네이티브 코드가 아니므로 CLR 상의 Just-In-Time(JIT) 컴파일러를 한번 더 거쳐야 한다.
이 때의 컴파일은 플랫폼에 따라 다르게 진행되므로 .NET 기반의 언어들은 크로스 플랫폼으로 동작할 수 있다.
또한 CLR은 컴파일뿐만 아니라 보안, 메모리 관리 등의 작업도 해주기 때문에 C를 비롯한 네이티브 언어들에 비해 생산성이 높은 편이다.
그러나, 위 작업들은 모두 런타임에 진행되기 때문에 성능에 악영향을 끼치게 된다.
*JIT 컴파일은 말그대로 필요할 때마다 컴파일을 진행하는 방식이다.
인터프리트와 다른 점은 컴파일된 코드를 캐싱하여 재사용한다는 점에 있다.
'언어 > C#' 카테고리의 다른 글
Delegate와 Action, Func, Predicate (0) | 2023.07.20 |
---|---|
C#에서 배열을 부분 참조하는 방법 (0) | 2022.12.29 |
비교-정렬을 위한 두 인터페이스, IComparable과 IComparer (1) | 2022.10.02 |
댓글