.NET 플랫폼은 생산성, 성능, 보안 및 안정성을 제공하도록 설계되었습니다. 가비지 수집기(GC)를 통해 자동 메모리 관리를 제공합니다. GC 및 엄격한 언어 컴파일러를 사용하기 때문에 형식이 안전하며 메모리가 안전합니다. async/await 및 Task 프리미티브를 통해 동시성을 제공합니다. 여기에는 광범위한 기능을 갖추고 여러 운영체제 및 칩 아키텍처의 성능에 최적화된 대규모 라이브러리 집합이 포함되어 있습니다.
SDK 및 기타 도구 -- 최신 워크플로를 사용하여 앱을 빌드하고 모니터링할 수 있습니다.
앱 스택 -- ASP.NET Core 및 Windows Forms와 같이 앱을 작성할 수 있습니다.
런타임, 라이브러리 및 언어는 .NET 스택의 핵심 요소입니다. .NET 도구와 같은 상위 수준 구성 요소 및 앱 스택(예: ASP.NET Core)은 이러한 핵심 요소를 기반으로 합니다. C#은 .NET의 기본 프로그래밍 언어이며 대부분의 .NET은 C#으로 작성됩니다.
C#은 개체 지향이며 런타임은 개체 방향을 지원합니다. C#에는 가비지 컬렉션이 필요하며 런타임은 추적 가비지 수집기를 제공합니다. 라이브러리(및 앱 스택)는 개발자가 직관적인 워크플로에서 알고리즘을 생산적으로 작성할 수 있도록 하는 개념 및 개체 모델로 이러한 기능을 형성합니다.
핵심 라이브러리에는 수천 개의 형식이 노출되어 있으며, 이 중 상당수는 C# 언어와 통합되어 있습니다. 예를 들어 C#의 foreach 문을 사용하면 임의의 컬렉션을 열거할 수 있습니다. 패턴 기반 최적화를 통해 List<T> 컬렉션과 같은 작업을 간단하고 효율적으로 처리할 수 있습니다. 리소스 관리는 가비지 컬렉션에 맡길 수 있지만, using 명령문에서 IDisposable 및 직접 언어 지원을 통해 신속한 정리가 가능합니다.
여러 작업을 동시에 수행하는 기능은 거의 모든 워크로드의 기본입니다. UI 응답성을 유지하면서 백그라운드 처리를 수행하는 클라이언트 애플리케이션, 수천 개의 동시 요청을 처리하는 서비스, 수많은 동시 자극에 응답하는 디바이스, 컴퓨팅 집약적인 작업을 병렬 처리하는 고성능 머신 등이 이에 해당할 수 있습니다. 비동기 프로그래밍 지원은 C# 프로그래밍 언어의 최고급 기능으로, 이 언어가 제공하는 모든 제어 흐름 구조의 이점을 최대한 활용하면서 비동기 연산을 쉽게 작성하고 구성할 수 있는 async 및 await 키워드를 제공합니다.
이 형식 시스템은 안전성, 설명력, 역동성 및 네이티브 interop을 어느 정도 동일하게 충족하면서 상당한 폭을 제공합니다. 무엇보다도 형식 시스템은 객체 지향 프로그래밍 모델을 가능하게 합니다. 여기에는 형식, (단일 기본 클래스) 상속, 인터페이스(기본 메서드 구현 포함), 가상 메서드 디스패치가 포함되어 객체 지향이 허용하는 모든 타입 레이어링에 대해 합리적인 동작을 제공합니다. 제네릭 형식은 클래스를 하나 이상의 형식으로 전문화할 수 있는 범용 기능입니다.
.NET 런타임은 가비지 수집기를 통해 자동 메모리 관리를 제공합니다. 모든 언어에서 메모리 관리 모델은 그 언어의 가장 큰 특징일 것입니다. .NET 언어의 경우도 마찬가지입니다. .NET에는 자체 튜닝, 추적 GC가 있습니다. 일반적인 경우에는 “핸즈 오프” 작업을 제공하는 동시에 보다 극한의 워크로드를 위한 구성 옵션을 제공하는 것을 목표로 합니다. 현재의 GC는 다년간의 투자와 다양한 워크로드에서 얻은 학습의 결과물입니다.
값 형식과 스택 할당 메모리 블록은 .NET의 GC 관리 유형과 달리 데이터 및 네이티브 플랫폼 상호 운용에 대한 보다 직접적이고 낮은 수준의 제어를 제공합니다. 정수 형식과 같은 .NET의 기본 형식은 대부분 값 형식이며, 사용자는 비슷한 의미 체계로 자신만의 형식을 정의할 수 있습니다. 값 형식은 .NET의 제네릭 시스템을 통해 완벽하게 지원되므로, List<T> 같은 제네릭 형식은 값 형식 컬렉션에 대해 오버헤드 없는 플랫 메모리 표현을 제공할 수 있습니다.
리플렉션은 “데이터로서의 프로그램” 패러다임으로, 어셈블리, 형식 및 멤버 측면에서 프로그램의 한 부분이 다른 부분을 동적으로 쿼리하고 호출할 수 있게 해줍니다. 런타임에 바인딩된 프로그래밍 모델 및 도구에 특히 유용합니다.
예외는 .NET의 기본 오류 처리 모델입니다. 예외는 오류 정보를 메서드 서명에 표시하거나 모든 메서드에서 처리할 필요가 없다는 이점이 있습니다. 적절한 예외 처리는 애플리케이션 안정성에 필수적입니다. 앱이 충돌하지 않도록 하려면 코드에서 예상되는 예외를 의도적으로 처리할 수 있습니다. 크래시된 앱은 정의되지 않은 동작을 가진 앱보다 더 안정적이고 진단 가능합니다.
ASP.NET Core 및 Windows Forms와 같은 앱 스택은 하위 수준 라이브러리, 언어 및 런타임을 기반으로 빌드하고 활용합니다. 앱 스택은 앱이 구성되는 방식과 실행 수명 주기를 정의합니다.
SDK 및 기타 도구를 사용하면 개발자 데스크톱과 CI(연속 통합) 모두에서 최신 개발자 환경을 사용할 수 있습니다. 최신 개발자 환경에는 코드를 빌드, 분석 및 테스트할 수 있는 기능이 포함됩니다. .NET 프로젝트는 NuGet 패키지 복원 및 종속성 빌드를 오케스트레이션하는 단일 dotnet build 명령을 통해 빌드될 수 있습니다.
NuGet은 .NET의 패키지 관리자입니다. 여기에는 많은 시나리오에 대한 기능을 구현하는 수십만 개의 패키지가 포함되어 있습니다. 대부분의 앱은 일부 기능에 대해 NuGet 패키지를 사용합니다. NuGet 갤러리는 Microsoft에서 유지 관리합니다.
무료 및 오픈 소스
.NET은 무료 오픈 소스이며 .NET Foundation 프로젝트입니다. .NET은 여러 리포지토리의 Microsoft와 GitHub의 커뮤니티에서 유지 관리됩니다.