본문 바로가기

C# 프로그래밍/.Net 가이드

[C#] 공통 언어 런타임과 공통 중간 언어 (CLR & CIL)

반응형

CLR과 CIL에 대하여

exe 파일 구조 및 실행 순서

우리가 exe파일 혹은 dll파일을 생성을 하는 과정은 크게는 다음과 같은 구조로 이루어져 있다.

exe/dll 생성 과정

 

그리고 exe파일을 실행하면 다음과 같은 순서로 프로그램이 실행된다.

  1. 컴파일러가 CLR 로더를 실행한다.
  2. CLR 로더가 IL 코드를 실행한다.

 

정리하자면, exe/dll 파일 내부에는 CLR이라는 것이 있어서 실행되면 이것들이 IL 코드란 것을 실행해 주는 것이다.

그렇다면 CLR과 IL이 뭐길래 프로그램을 실행시켜 주는 것일까.


CLR (공통 언어 런타임)

쉽게 말하면 윈도우 운영체제에서 프로그램을 실행시켜 주는 핵심 요소이다. 이게 있어야 exe와 dll뿐만 아니라 윈도우에 돌아가는 프로그램을 실행시킬 수 있다.

 

정확하게는 윈도우 프로그램을 실행시켜 주는 가상환경(VM) 중 하나이다.

 

CLR(Common Language Runtime)은 아주 중요한 역할 몇 가지를 수행한다.

  1. 메모리 관리 : GC(garbage collector)를 제공하며 동적 메모리 할당과 회수를 지원한다. GC는 자동으로 메모리를 관리해 주어 메모리 누수를 방지하고 안정성을 제공하며 개발자들에게 편의를 제공한다. 이는 C#과 같은 닷넷 프레임워크 언어들이 높은 생산성을 가지는 이유중 하나이다.
  2. JIT 컴파일러 : JIT(Just In Time) 컴파일을 사용하여 .Net 애플리케이션을 실행한다. JIT 컴파일은 실행 시점에 필요한 코드 블록을 기계어로 변환하여 실행하게 해 준다. 실행 시점에 동적으로 실행하므로 성능이 최적화되며 효율적으로 관리될 수 있다.
  3. 안정성 향상 : 코드 검사와 예외 처리를 지원한다. 스택 오버 플로우, 배열 인덱스 초과, 널 참조 에러 등 자주 발생하는 오류는 CLR이 찾아 예외 처리를 해준다.

그래서 어떤 프로그램을 실행하기 위해서는 CLR이 있어야하며, CLR이 있다면 닷넷 환경에서 동작할 수 있는 것이다.


CIL (공통 중간 언어)

CIL은 Common Intermeiate Language의 약자이다. 이름에서 알 수 있듯 공통으로 사용하는 언어라는 뜻인데, 닷넷에서 개발되는 언어들이 공통으로 사용하는 언어라고 생각하면 된다.

 

CLR이 윈도우 프로그램을 로드시켜 주는 가상환경이라면, CIL(줄여서 IL로 부른다)은 이 CLR에 탑재되는 데이터의 실체인 셈이다.

그런데 우리가 exe파일을 C#으로도 만들 수 있고 F#이나 Visual Basic으로도 만들 수 있지 않은가?

그렇다면 CLR은 각 언어마다 로드하는 별개의 로직을 갖고 있어야 하는가?

 

그렇지 않다. C#, F# 등의 닷넷 호환 언어들은 CIL이라는 중간 언어를 생성한다. 그리고 이 언어가 CLR에 탑재되는 것이다.

 

따라서 IL코드로 변환만 된다면 모두 CLR에 올릴 수 있고 윈도우에서 실행할 수 있게 된다.

반응형