다음을 통해 공유


"관리 코드"란?

.NET으로 작업할 때 "관리 코드"라는 용어가 자주 발생합니다. 이 문서에서는 관리 코드 의미를 설명하고 이에 대한 추가 정보를 제공합니다.

간단히 말해서, 관리 코드는 런타임에 의해 실행이 관리되는 코드입니다. 이 경우 해당 런타임은 구현(예: Mono, .NET Framework 또는 .NET Core/.NET 5 이상)과 관계없이 공용 언어 런타임 또는 CLR이라고 합니다. CLR은 관리 코드를 가져와서 컴퓨터 코드로 컴파일한 다음 실행하는 일을 담당합니다. 또한 런타임은 자동 메모리 관리, 보안 경계 및 형식 안전성과 같은 몇 가지 중요한 서비스를 제공합니다.

이를 "관리되지 않는 코드"라고도 하는 C/C++ 프로그램을 실행하는 방식과 대조합니다. 관리되지 않는 세계에서 프로그래머가 거의 모든 것을 담당하고 있습니다. 실제 프로그램은 기본적으로 운영 체제(OS)가 메모리에 로드되고 시작되는 이진 파일입니다. 메모리 관리에서 보안 고려 사항에 이르기까지 다른 모든 것은 프로그래머의 부담입니다.

관리 코드는 C#, Visual Basic, F# 등 .NET을 기반으로 실행할 수 있는 상위 수준 언어 중 하나로 작성됩니다. 해당 컴파일러를 사용하여 해당 언어로 작성된 코드를 컴파일하는 경우 컴퓨터 코드가 표시되지 않습니다. 런타임이 컴파일하고 실행하는 중간 언어 코드를 가져옵니다. C++는 Windows에서 실행되는 관리되지 않는 네이티브 이진 파일을 생성할 수도 있으므로 이 규칙의 한 가지 예외입니다.

중간 언어(Intermediate Language) & 실행

"중간 언어"(또는 짧은 경우 IL)란? 고급 .NET 프로그래밍 언어로 작성된 코드 컴파일의 결과물입니다. 이러한 언어 중 하나로 작성된 코드를 컴파일하면 IL로 만들어진 이진 파일이 생성됩니다. IL은 런타임에서 실행되는 특정 언어와 독립적이라는 점에 유의해야 합니다. 관심이 있는 경우 읽을 수 있는 별도의 사양도 있습니다.

상위 수준 코드에서 IL을 생성한 후에는 IL을 실행하려고 할 가능성이 높습니다. 여기서 CLR은 Just-In-Time 컴파일을 프로세스를 시작하거나 실제로 CPU에서 실행할 수 있는 IL에서 머신 코드로 코드를 JIT-ing을 . 이러한 방식으로 CLR은 코드가 수행하는 작업을 정확히 알고 효과적으로 관리할 있습니다.

중간 언어를 CIL(공용 중간 언어)이라고도 합니다.

관리되지 않는 코드 상호 운용성

물론 CLR을 사용하면 관리되는 환경과 비관리 환경 간의 경계를 넘을 수 있으며, .NET 클래스 라이브러리에서도이러한 작업을 수행하는 많은 코드가 있습니다. 이를 상호 운용성또는 interop 짧게 호출합니다. 예를 들어 이 규정은 관리되지 않는 라이브러리를 래핑하고 그 라이브러리를 호출할 수 있도록 허용합니다. 그러나 이 작업을 수행하면 코드가 런타임의 경계를 통과할 때 실행의 실제 관리는 관리되지 않는 코드의 손에 다시 포함되므로 동일한 제한에 해당합니다.

C#는 이와 유사하게, 'unsafe context'를 사용하여 코드에서 직접 포인터와 같은 관리되지 않는 구문을 사용할 수 있는 언어로, 이는 CLR에서 코드 실행이 관리되지 않는 부분을 지정합니다.

추가 리소스