.NET은 코드를 실행하는 공용 언어 런타임이라는 런타임 환경을 제공하고 개발 프로세스를 더 쉽게 만드는 서비스를 제공합니다.
컴파일러 및 도구는 공용 언어 런타임의 기능을 노출하고 관리되는 실행 환경의 이점을 제공하는 코드를 작성할 수 있도록 합니다. 런타임을 대상으로 하는 언어 컴파일러를 사용하여 개발하는 코드를 관리 코드라고 합니다. 관리 코드는 언어 간 통합, 언어 간 예외 처리, 향상된 보안, 버전 관리 및 배포 지원, 구성 요소 상호 작용을 위한 간소화된 모델, 디버깅 및 프로파일링 서비스와 같은 기능의 이점을 누릴 수 있습니다.
비고
컴파일러 및 도구는 형식 시스템, 메타데이터 형식 및 런타임 환경(가상 실행 시스템)이 모두 공용 표준인 ECMA 공용 언어 인프라 사양에 의해 정의되기 때문에 공용 언어 런타임에서 사용할 수 있는 출력을 생성할 수 있습니다. 자세한 내용은 ECMA C# 및 공용 언어 인프라 사양을 참조하세요.
런타임이 관리 코드에 서비스를 제공할 수 있도록 하려면 언어 컴파일러가 코드의 형식, 멤버 및 참조를 설명하는 메타데이터를 내보내야 합니다. 메타데이터는 코드와 함께 저장됩니다. 로드 가능한 모든 공용 언어 런타임 PE(이식 가능한 실행 파일) 파일에는 메타데이터가 포함됩니다. 런타임은 메타데이터를 사용하여 클래스를 찾아서 로드하고, 메모리에 인스턴스를 배치하고, 메서드 호출을 확인하고, 네이티브 코드를 생성하고, 보안을 적용하고, 런타임 컨텍스트 경계를 설정합니다.
런타임은 개체 레이아웃을 자동으로 처리하고 개체에 대한 참조를 관리하여 더 이상 사용되지 않을 때 해제합니다. 이러한 방식으로 수명이 관리되는 개체를 관리되는 데이터라고 합니다. 가비지 수집은 메모리 누수 및 기타 일반적인 프로그래밍 오류를 제거합니다. 코드가 관리되는 경우 .NET 애플리케이션에서 관리되는 데이터, 관리되지 않는 데이터 또는 둘 다를 사용할 수 있습니다. 언어 컴파일러는 기본 형식과 같은 고유한 형식을 제공하므로 데이터가 관리되고 있는지 여부를 항상 알거나 알 필요가 없을 수 있습니다.
공용 언어 런타임을 사용하면 개체가 언어 간에 상호 작용하는 구성 요소 및 애플리케이션을 쉽게 디자인할 수 있습니다. 다른 언어로 작성된 개체는 서로 통신할 수 있으며 해당 동작을 긴밀하게 통합할 수 있습니다. 예를 들어 클래스를 정의한 다음 다른 언어를 사용하여 원래 클래스에서 클래스를 파생하거나 원래 클래스에서 메서드를 호출할 수 있습니다. 클래스의 인스턴스를 다른 언어로 작성된 클래스의 메서드에 전달할 수도 있습니다. 이 언어 간 통합은 런타임을 대상으로 하는 언어 컴파일러 및 도구가 런타임에 정의된 공용 형식 시스템을 사용하기 때문에 가능합니다. 새 형식을 정의하고 형식에 대한 생성, 사용, 유지 및 바인딩에 대한 런타임의 규칙을 따릅니다.
메타데이터의 일부로 모든 관리되는 구성 요소는 빌드된 구성 요소 및 리소스에 대한 정보를 전달합니다. 런타임은 이 정보를 사용하여 구성 요소 또는 애플리케이션에 필요한 모든 항목의 지정된 버전이 있는지 확인하므로 일부 충족되지 않은 종속성으로 인해 코드가 중단될 가능성이 줄어듭니다. 등록 정보 및 상태 데이터는 더 이상 레지스트리에 저장되지 않으므로 설정 및 유지 관리가 어려울 수 있습니다. 대신 정의한 형식 및 해당 종속성에 대한 정보는 코드와 함께 메타데이터로 저장됩니다. 이렇게 하면 구성 요소 복제 및 제거 작업이 덜 복잡합니다.
언어 컴파일러 및 도구는 개발자에게 유용하고 직관적인 방식으로 런타임의 기능을 노출합니다. 런타임의 일부 기능은 다른 환경보다 한 환경에서 더 두드러질 수 있습니다. 런타임을 경험하는 방법은 사용하는 언어 컴파일러 또는 도구에 따라 달라집니다. 예를 들어 Visual Basic 개발자인 경우 공용 언어 런타임을 사용하면 Visual Basic 언어에 이전보다 더 많은 개체 지향 기능이 있음을 알 수 있습니다. 런타임은 다음과 같은 이점을 제공합니다.
성능 향상
다른 언어로 개발된 구성 요소를 쉽게 사용할 수 있는 기능입니다.
클래스 라이브러리에서 제공하는 확장 가능한 형식입니다.
개체 지향 프로그래밍에 대한 상속, 인터페이스 및 오버로드와 같은 언어 기능입니다.
다중 스레드 및 확장 가능한 애플리케이션을 만들 수 있는 명시적 무료 스레딩을 지원합니다.
구조적 예외 처리를 지원합니다.
사용자 지정 특성에 대한 지원.
가비지 수집.
형식 안전성 및 보안을 강화하기 위해 함수 포인터 대신 대리자를 사용합니다. 대리자에 대한 자세한 내용은 Common Type System을 참조하세요.
CLR 버전
.NET Core 및 .NET 5+ 릴리스에는 단일 제품 버전이 있습니다. 즉, 별도의 CLR 버전은 없습니다. .NET Core 버전 목록은 .NET Core 다운로드를 참조하세요.
그러나 .NET Framework 버전 번호가 포함된 CLR의 버전 번호와 반드시 일치하는 것은 아닙니다. .NET Framework 버전 및 해당 CLR 버전 목록은 .NET Framework 버전 및 종속성을 참조하세요.
관련 문서
| 제목 | 설명 |
|---|---|
| 관리되는 실행 프로세스 | 공용 언어 런타임을 활용하는 데 필요한 단계를 설명합니다. |
| 자동 메모리 관리 | 가비지 수집기가 메모리를 할당하고 해제하는 방법을 설명합니다. |
| .NET Framework 개요 | 공용 형식 시스템, 언어 간 상호 운용성, 관리되는 실행, 애플리케이션 도메인 및 어셈블리와 같은 주요 .NET Framework 개념에 대해 설명합니다. |
| 공용 형식 시스템 | 언어 간 통합을 지원하기 위해 런타임에서 형식을 선언, 사용 및 관리하는 방법을 설명합니다. |
.NET