C# 스크립트는 닷넷 실행 환경에서 동작하게 된다. 이때 닷넷이 무엇이고, C# 스크립트가 실행되기까지 어떤 과정을 거치는지 알아보자.
.NET Framework(이하 닷넷)은 MS에서 개발한 윈도우 프로그램 개발 및 실행 환경이다. 네트워크 작업, 인테페이스 등 많은 작업을 캡슐화하고, CLR(공통 언어 런타임, Common Language Runtime)이라는 이름의 가상 머신 위에서 작동한다.
닷넷 호환 언어가 만족해야 하는 최소 사양. 실행 환경이 중간 언어(IL) 코드를 기계어로 번역할 때 충분하지 못한 사양의 언어를 만난다면 적절한 번역이 이루어지지 않기 때문에 반드시 만족해야 하는 수준의 사양이 존재한다.
닷넷 호환 언어가 지켜야 할 타입의 표준 규격을 정의한 것이다. 닷넷 프레임워크 상에서 실행하고자 하는 모든 언어는 CTS 규약을 만족하는 한도 내에서만 구현할 수 있다. CTS가 정의하는 형식 또는 속성의 예시는 다음과 같다.
- 클래스
- 구조체
- 열거형
- 인터페이스
- 대리자
- 액세스 한정자
- 상속 및 오버로드 작동 방식
CLS는 CTS에 속한다. 즉, CTS가 더 넓은 범위의 형식이므로 CTS의 모든 형식을 만족할 필요는 없지만, 최소한의 언어 사양을 정의한 좁은 범위의 CLS는 반드시 만족해야 한다.
줄여서 IL, 또는 MSIL(Microsoft IL)이라고도 하며, 닷넷 호환 언어를 컴파일하면 IL로 번역되어 exe
, dll
확장자의 실행 파일을 생성한다. 이렇게 IL로 작성된 실행 파일을 닷넷 어셈블리(.Net Assembly)라고 한다.
이때 IL은 바이트코드(Bytecode)라는 가상 머신이 이해할 수 있는 중간 코드이며, 가상 머신이 이 바이트코드를 각 하드웨어 아키텍처에 맞는 기계어로 번역하게 된다.
C#, VB, F# 등 컴파일하여 IL을 생성할 수 있다면 모두 닷넷 호환 언어이다. 즉, 모든 닷넷 호환 언어는 모두 IL이라는 하나의 형태로 번역된다. 이 호환성을 위해 CLS가 필요하다.
닷넷 프레임워크 구조의 표준사양이라고 볼 수 있다. CTS 명세, MSIL에 대한 코드 정의 및 MSIL의 구조, 메타데이터 등을 포함한다. 닷넷 프레임워크는 CLI의 구현체라고 볼 수 있다.
닷넷의 실질적 실행 환경으로 OS 위에서 닷넷 어플리케이션을 실행할 수 있게 해주는 중요한 요소다. 닷넷 호환 언어를 컴파일하여 생성된 실행 파일인 닷넷 어셈블리는 이 CLR 위에서 동작하고, CLR에 포함된 JIT(Just-In-Time) 컴파일러 등으로 IL을 기계어로 번역해 실제 OS에서 동작할 수 있게 된다.
▶ [Wikipedia] 닷넷 프레임워크
▶ [오라클자바 Youtube 채널] 닷넷이란? CLI, CLS, CLR, CTS, 어셈블리 VS 2022, C# HelloWorld, Main함수
▶ .NET - C# CLR, CIL
▶ 닷넷 프레임워크 (CIL, CTS, CLS, CLI, CLR)
▶ [나무위키] 바이트코드
▶ C# - .NET 용어 요약 #2
▶ .NET - CLR, CTS와 CLS
▶ [MS Document] 공용 형식 시스템 & 공용 언어 사양-