닷넷프레임웍크 및 개발환경의 이해
.Net Framework
.NET Framework는 Windows 응용 프로그램을 개발하고 실행할 수 있도록 제공된 기본 환경이다. .NET Framework로 개발된 프로그램들은 CLR이라고 불리는 독립적인 환경에서 실행된다. 개발에 필요한 기능을 미리 만들어 묶어 놓은 .NET Framework 클래스 라이브러리가 포함되어 있다.
CLR
**CLR(Common Language Runtime)**은 .NET Framework로 개발된 프로그램을 실행할 수 있도록 환경을 제공해주고 관리하는 프로그램이다. .NET Framework로 작성된 코드는 컴파일러에 의해 **CIL(Common Intermediate Language)**로 변환된다. 이때 CLR은 CIL 코드를 읽어서 현재 사용 중인 컴퓨터 환경에 적합한 기계어를 생성한 후 프로그램을 실행시킨다. 이처럼 이중의 컴파일 과정을 이용하면 Microsoft의 Windows, Windows Phone, Windows 스토어 앱 등 다양한 플랫폼에서 .NET Framework로 개발된 프로그램을 사용할 수 있다. 또한, CLR은 메모리 관리, Garbage Collection, Thread 관리, 예외 처리, 보안과 같은 서비스를 제공한다.
CTS
**CTS(Common Type System)**는 .NET 호환 언어가 지켜야 할 형식(Type)에 대한 표준 규격을 정의한 것이다. 이 규격을 따르면 다양한 언어 간에 호환성을 갖추어 프로그램을 구현할 수 있다.
Assembly
흔히 알고 있는 Low-Level 언어의 Assembly가 아니라 .NET의 실행 가능한 파일을 의미한다. C#을 예로 들면 EXE, DLL 파일을 말하며 이러한 실행 가능한 파일을 Assembly라고 한다. CIL와 Resources로 구성되어 있고, 어셈블리에 대한 정보인 Metadata가 포함되어 있다.
Managed Code
Managed Code는 .NET 호환 언어의 컴파일러에 의해 CIL을 만들고, CLR에서 컴퓨터 환경에 따라 기계어를 생성하여 프로그램을 실행할 수 있는 코드이다. .NET Framework가 설치된 환경이라면 프로그램을 실행할 수 있어 확장성이 뛰어나다. Managed Code로 작성된 프로그램은 실행되는 동안에 CLR에 의해 프로그램이 관리되고 동작하기 때문에 Garbage Collection을 통해 메모리를 알아서 관리해준다.
Unmanaged Code
Unmanaged Code는 컴파일할 때 기계어로 번역하여 운영체제에서 바로 프로그램을 실행할 수 있는 코드이다. CIL을 만들지 않고 실행되므로 속도가 빠른 편이지만, 컴파일할 때 현재 환경에 적합한 기계어를 번역하므로 다른 환경에서는 확장성이 떨어진다. Managed Code와 다르게 메모리 관리 서비스를 받지 않기 때문에 프로그래머가 직접 메모리를 할당, 해제하거나 Windows의 경우 SDK가 제공하는 API 함수를 사용하여 메모리를 관리할 수 있다.
.Net Framework, C#, Visual Studio 버전 간의 상관관계
.Net Framework | 특징 | C# | 특징 | Visual Studio | ||
---|---|---|---|---|---|---|
1.0 ~ 1.1 | 최초 버전 | 1.0 | 최초 버전 | .NET 2002, 2003 | ||
2.0 | 제네릭 제공 | 2.0 | 제네릭, 익명 메소드, nullable 형식 추가 | 2005 | ||
3.0 | WPF, WCF, WF 제공 | 2.0 | - | 2005 Extensions | ||
3.5 | LINQ 추가 | 3.0 | LINQ, var, 익명 형식, 확장 메소드, lambda 추가 / WPF 제공 | 2008 | ||
4.0 | MEF, DLR 추가 | 4.0 | dynamic 바인딩 지원 | 2010 | ||
4.5 | 비동기 지원 | 5.0 | async, await 예약어 추가 | 2012, 2013 |