본문 바로가기
Language/CPP&C#

[C#] CLR(Common Language Runtime)

by nyangzzi 2021. 5. 18.
반응형

C#으로 만든 프로그램은 CLR(common Language Runtime, 공통 언어 런타임) 위에서 실행된다.

CLR은 마이크로 소프트 이니셔티브에서 제공하는 가상 머신의 구성 요소이며, JAVA의 JVM(Java Virtual Machine, 자바가상머신)과 유사한 기능을 한다. 

 

네이티브 코드로 작성된 프로그램들은 운영체제가 직접 실행 할 수 있지만, C# 컴파일러가 만들어낸 실행파일은 하드웨어가 이해할 수 없는 코드로 되어 있기 때문에 실행 할 수 없다. 따라서 하드웨어가 이해할 수 있도록 변환하는 작업이 필요한데, 이 역할을 하는 것이 바로 CLR이다.

 

 

C# 컴파일러는 C# 소스 코드를 컴파일해서 CIL(Common Intermediate Language)라는 중간 언어로 작성된 실행 파일을 만들어내며, CIL은 닷넷 프레임워크를 지원하는 환경에서 실행할 수 있는 CPU와 플랫폼 독립 명령어 세트이다.  CIL은 바이트코드 형태로 구성되어 있다.

이렇게 CIL 언어로 작성된 파일을 사용자가 실행시키면,  CLR이 이 중간 코드를 읽어들여 하드웨어가 이해할 수 있는 네이티브 코드로 변환한 후 실행시킨다. 

 

정리하자면, 사용자가 코드를 실행시킬 때 컴파일러가 CIL 파일을 만들고 그 뒤 CLR이 다시 컴퓨터가 이해할 수 있는 하드웨어로 변환하는 2번의 과정을 거쳐 최종적으로 코드가 실행되는 것이다.

이는 JIT(Just In Time) 컴파일이라고도 하는데, 실행에 필요한 코드를 실행 때마다 실시간으로 컴파일해서 실행한다는 뜻이다.

 

 

이렇게 번거로운 과정을 거쳐 코드를 실행하는 이유는, CLR이 C# 뿐 아니라 다른 언어도 지원하도록 설계되었기 때문이다. 서로 다른 언어를 컴파일했을 때, 각각 해당 언어의 컴파일러가 코드를 앞서 언급한 IL 언어로 변환하면 CLR은 자신이 설치된 플랫폼에 최적화시켜 재컴파일한 후 실행하는 것이다. 이렇게 하면 어떤 기계에서도 최적화되어 최고의 성능을 내는 것이 가능해진다.

기존 C++과 같은 컴파일러와 비교하여 컴파일하는데 시간적 비용이 많이 쇼요될 수 밖에 없다는 단점에도 CLR이 사용되는 이유이다. 더욱이 최근에는 컴퓨터 성능이 좋아짐에 따라 컴파일 시간보다는 최적화된 코드가 더 중요시 여겨지고 있다.

 

CLR은 단순히 C#이나 기타 언어를 동작시키는 환경 기능 이외에도, 아래와 같은 여러 기능을 제공한다.

- 프로그램 예외 발생 시 처리를 돕는 기능

- 언어 간의 상속 지원

- COM과의 상호 운영성 지원

- 자동 메모리 관리

 

 

https://docs.microsoft.com/ko-kr/dotnet/standard/clr

 

CLR(공용 언어 런타임) 개요 - .NET

.NET 런타임 환경인 CLR(공용 언어 런타임)로 시작합니다. CLR은 코드를 실행하고 개발 프로세스를 용이하게 하는 서비스를 제공합니다.

docs.microsoft.com

 

반응형

'Language > CPP&C#' 카테고리의 다른 글

[C#] var 키워드  (0) 2021.05.20
[C#] object (boxing/unboxing)  (0) 2021.05.20
[C#] Null  (0) 2021.05.18
[Visual Studio] 명령 프롬프트(cmd)로 파일 실행하기  (0) 2021.05.18
[C++] Hello, World!  (0) 2021.05.14

댓글