* 정의
.NET은 다양한 애플리케이션을 개발하기 위한 개발자 플랫폼으로 여러 도구와 프로그래밍 언어, 라이브러리로 구성되어 있다. .NET코드를 여러 플랫폼(Windows, macOS, Linux, IOS, Android)에서 실행시키기 위해 다양하게 .NET을 구현하고 있다. 이러한 크로스 플랫폼 구현은 여러 환경에서 웹 사이트, 서비스, 콘솔 앱을 실행시킬 수 있도록 해준다.
- .NET Framework
.NET Framework는 .NET의 오리지널 구현 버전으로 Windows 환경에서 웹 사이트, 서비스, 앱 등의 실행을 지원한다. 간단히 실행 중인 앱에 다양한 서비스를 제공하는 Windows용 관리 실행 환경이다.
* .NET Framework의 구성
.NET Framework의 메인 구성 요소는 CLR(Common Language Runtime)과 .NET Framework Class Library이다.
- CLR(Common Language Runtime)
CLR은 실행중인 앱들을 관리하는 실행 엔진이다. CLR은 가비지 컬렉션, 타입 안전성, 예외 처리, 스레드 관리와 같은 서비스를 제공한다.
- Class Library
Class Library는 API들과 일반적인 기능을 위한 타입들을 제공한다. 예를 들어보면 문자열, 날짜, 숫자를 위한 자료형을 제공하고 파일을 읽고 쓰는 API, 데이터 베이스에 연결하는 API 등을 제공한다.
- .NET Framework가 제공 중인 서비스
- 메모리 관리 : 일반적인 프로그래밍 언어에서는 객체의 생명주기를 관리하기 위한 메모리 할당 해제를 수행해야한다. .NET Framework에서는 CLR에서 알아서 해준다.
- 공용 형식 시스템(Common Type System) : 전통적인 프로그래밍 언어에서는 기본 타입들은 컴파일러가 정의하기 때문에 언어 간 상호 운용성을 복잡하게 만든다. .NET Framework에서는 기본 타입은 .Net Framework 타입 시스템에 의해 정의되고 .NET Framework를 사용하는 모든 언어에서 공통이다.
- 언어 상호 운용성(interoperability) : .NET Framework에서 각 언어의 컴파일러는 모두 CIL(Common Intermediate Language)로 컴파일 한다. CIL은 모든 언어가 만나는 중간 지점이라고 보면 된다. 이 CIL은 다시 런타임에 CLR가 플랫폼에 따라 적절하게 컴파일한다. 이러한 과정을 거치기 때문에 다른 언어로 작성된 루틴에 접근할 수 있다.
추가 정보는 다음 링크에서 확인할 수 있다.
Get started with .NET Framework - .NET Framework
Get started with .NET Framework, which is a runtime execution environment that manages apps. It contains a common language runtime (CLR) and an extensive class library.
docs.microsoft.com
- 실행 과정
.NET 앱들은 C#, F#, Visual Basic 프로그래밍 언어로 작성되며, 코드는 특정 언어에 영향을 받지 않는 CIL(Common Intermediate Language)로 컴파일 된다. 컴파일된 코드(CIL)는 어셈블리로 dll또는 exe파일에 저장된다.
앱이 실행되면 CLR은 어셈블리를 가져와서 JIT(Jist-In-Time) 컴파일러를 사용하여 기계어로 변환한다. 변환된 기계어는 컴퓨터의 특정 아키텍처에서 실행될 수 있는 형식이다.
2번의 컴파일 과정을 거치는 이유 : CLR은 C#, Visual Basic 등 여러 언어를 지원하도록 설계되어 있다. 이를 실현시키기 위해 언어들이 만나는 지점을 CIL이다. 이 언어로 쓰인 코드는 다시 CLR이 자신이 설치된 플랫폼에 최적화시켜 컴파일 후 실행하게 된다.
'C#' 카테고리의 다른 글
[C#] string vs StringBuilder (0) | 2022.06.28 |
---|---|
[C#] Nullable 타입 (0) | 2022.06.28 |
[C#] 값 타입과 참조 타입(Value type, Reference type) (0) | 2022.06.28 |
[C#] abstract, sealed (0) | 2022.04.08 |
[C#] 정적 클래스(static class) (0) | 2022.04.08 |