<--! 수학 기호 --> [C#] CLR(Common Language Runtime)과 네이티브 코드(Native Code)

새소식

반응형
Language/C#

[C#] CLR(Common Language Runtime)과 네이티브 코드(Native Code)

  • -

*이 글은 <이것이 C#이다> 책을 바탕으로 공부한 글입니다.

 

 

네이티브 코드(Native Code) C#의 CLR

 

네이티브 코드CPU와 운영체제가 직접적으로 실행할 수 있는 코드들을 말한다. 보통 우리가 알고 있는 프로그래밍 언어들은 컴파일(Compile) 과정을 거쳐, 운영체제가 실행할 수 있는 기계어로 번역된다. 하지만, 이런 방식은 OS 및 HW 환경이 달라지면 실행이 불가능하다.

 

네이티브 코드의 단점을 해결하기 위해, 자바에서는 JVM, C#에서는 CLR과 같은 프로그램을 도입했다. C# 글이니 CLR에 대해서만 알아보자면, CLR은 .NET 라이브러리와 함께 OS 위에 설치된다.

 

그리고 C# 컴파일러는 C# 소스 코드를 컴파일하여, IL(Intermediate Language)라는 중간 언어로 작성된 실행 파일을 만든다. 사용자가 이 파일을 실행시키면, CLR이 중간 코드를 읽어 들여 다시 하드웨어가 이해할 수 있는 네이티브 코드로 컴파일한 후에 실행하게 되는 것이다. 이것을 JIT(Just In Time) 컴파일이라고 부른다.

즉, 실행에 필요한 코드를 실행할 때마다 실시간으로 컴파일해서 실행한다는 의미

 

CLR이 이런 방법을 채택한 이유는 CLR이 C#뿐만 아니라 다른 언어도 지원하도록 설계되어 있기 때문이다. 서로 다른 언어들이 만나기 위한 지점이 바로 IL이 되는 것이고, 이 언어로 쓰인 코드를 CLR이 다시 자신이 설치된 플랫폼에 최적화시켜 컴파일한 후 실행하는 것이다.

 

단점은 일반적인 프로그램보다는 컴파일 비용이 크다는 것이다. 그래도, 컴파일 비용이 조금 더 들고 현재 기계에 최적화된 성능을 내는 것을 생각하면 나쁘지는 않은 것 같다.

 

마지막으로, CLR은 프로그래밍 언어들을 동작시키는 환경 기능 외에도, 프로그램의 오류가 발생했을 때 이를 처리하도록 도와주는 기능, 언어 간의 상속 지원, COM과의 상호 운영성 지원, 자동 메모리 관리 등의 기능 또한 제공한다고 한다.

 

 

728x90

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

[C#] TryParse() VS Parse()  (0) 2022.03.13
[C#] Null과 관련된 연산자들(?, [ ]?, ??)  (0) 2022.03.13
[C#] 문자열 서식 맞추기 (string.Format(), 문자열 보간)  (0) 2022.03.09
[C#] Nullable  (0) 2022.03.09
[C#] 프로퍼티(Property)  (0) 2022.02.15
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.