본문 바로가기
소프트웨어 공학

CLR(Common Language Runtime)의 정의 등 전반적인 이해

by iwuooh 2022. 1. 12.

CLR(Common Language Runtime, 공용 언어 런타임)의 개념

CLR(Common Language Runtime, 공용 언어 런타임)은 마이크로 소프트사의. NET 프레임워크의 기본이자. NET 프레임워크의 가상 머신(Virtual Machine, VM)으 구성 요소이다. 이는 코드를 실행하며 개발을 좀 더 쉽게 할 수 있는 서비스를 제공한다. CLR은 CIL(Common Intermediate Language, 공통 중간 언어)라 불리는 바이트코드의 형태를 실행한다. CIL는 인간이 이해할 수 있는 가장 낮은 단계의 프로그래밍 언어로 보면 된다. CLR을 사용하는 개발자들이 C# 등의 언어로 프로그래밍을 하면 해당 언어의 컴파일러가 CIL를 운영 체제의 네이티브 코드로 변환한다. CLR의 가상 머신은 개발자들이 CPU에 관해 세세한 정보까지 신경 쓰지 않아도 되게끔 하며 메모리 관리, 스레드 관리, 언어 간 예외 처리 및 강화된 보안등의 중요한 서비스까지 제공해준다. CLR를 대상으로 언어 컴파일러를 사용하여 개발하는 코드를 관리 코드라고 하는데, CLR에서 관리 코드에 서비스를 제공하려면 해당 언어 컴파일러에서 사용자 코드의 형식과 참조를 설명하는 메타데이터를 보내야 한다. CLR에서는 넘겨받은 메타데이터를 사용하여 메서드 호출을 확인하고, 클래스를 찾고 로드하며 네이티브 코드를 생성한다. CLR을 사용하면 애플리케이션에 속해있는 개체가 다양한 언어를 통해 상호작용 하는 경우 이를 보다 쉽게 만들 수 있다. 예를 들어, 클래스를 정의하고 다른 언어를 사용하여 해당 클래스를 파생시키거나 원본 클래스의 메서드를 호출할 수도 있다. 또한 원본 클래스의 인스턴스를 다른 언어로 작성된 클래스의 메서드로 전달할 수도 있다. CLR을 대상으로 하는 언어 컴파일러가 새 형식을 정의할 때에도 CLR에서 정의한 공통적인 형식을 사용하고 형식의 생성, 유지 등의 규칙도 모두 따르기 때문에 이렇게 언어 간의 통합이 비교적 쉽게 가능한 것이다.

CLR(Common Language Runtime, 공용 언어 런타임)의 장점

CLR의 기능은 언어 컴파일러 및 도구로 하여금 개발자에게 보다 유연하고 자연스러운 방식으로 개발을 하도록 도와준다. 일부 기능은 환경에 따라 더 두드러지게 효과를 발휘한다. 사용하는 언어의 컴파일러 도구에 따라 CLR을 사용하는 방법을 달라지지만 대체로 다음과 같은 이점을 제공한다. 우선, 다른 언어로 개발된 구성 요소를 쉽게 사용할 수 있게 하고 이를 통해 성능이 향상된다. 개별 언어 컴파일러가 아니라 CLR에서 사용 가능한 기본적인 규칙이 정해 지므로 생산성이 높아지는 것이다. 개발자 본인이 스스로 개발한 언어뿐만 아니라 다른 개발자가 다른 언어로 작성한 코드의 클래스 라이브러리, 구성요소를 완전히 재사용할 수 있다. 이런 이유로 공용 형식 시스템은 언어의 독립성을 좀 더 실현 가능하게 도와주고 개발자는 자신이 선택한 언어에 집중하여 응용 프로그램을 개발할 수 있게 된다. 또한, 인터페이스, 상속, 객체 지향적인 프로그래밍을 위한 오버 로딩과 같은 기능도 제공한다. 구조적 예외 처리에 대한 지원과 사용자 지정 특성에 대한 것도 지원한다. 쓰레기를 수집하여 응용 프로그램의 메모리 할당과 해제를 관리한다. 즉, 응용 프로그램을 개발할 때 개발자는 메모리를 관리하는 작업을 수행하기 위한 별개의 코드를 작성할 필요가 없다는 것이다. CLR을 통해 자동으로 메모리를 관리하게 되면 메모리 관리 대한 일반적인 문제들도 해결된다.

CLR(Common Language Runtime, 공용 언어 런타임)의 동작원리

개발자가 본인이 선택한 언어로 코드를 작성하면 해당 언어의 컴파일러가 CIL로 작성된 실행 파일을 만들어낸다. 사용자가 이 CIL로 작성된 파일을 실행하면 CLR이 CIL을 읽어서 하드웨어가 이해할 수 있는 네이티브 코드로 컴파일한 후에 실행을 시킨다. 이러한 방식은 플랫폼에 최적화된 방법으로 코드를 만들어 낸다는 이점이 있다. 그러나 파일을 실행할 때 이루어지는 컴파일 비용이 늘어난다는 단점도 있다. 그러나 이런 컴파일 비용의 부담 없이 평균 정도의 성능을 가지는 프로그램을 만드는 것과 비용을 조금 들여서 기계에 최적화시킨 후 최상의 성능을 내는 것을 비교해보면 후자가 멀리 봤을 때 더 경제적일 수 있는 것이다.

댓글