앞서 마이크로소프트 닷넷 전략과 비전 그리고 닷넷 플랫폼에 대해 간략히 알아 보았습니다.
이번 시간에는 닷넷 프레임워크에 대해 살펴 보도록 하겠습니다.
닷넷 프레임워크는 마이크로소프트의 닷넷 전략을 실현하기 위한 개발의 도구적 환경이라 할 수 있습니다.
즉 개발을 위한 언어 집합, 유틸리티, 컴파일러, API's 등이 닷넷 프레임워크에 포함되어 있으며
공통 언어 명세를 위한 규약 및 응용프로그램 실행을 위한 가상 머신(닷넷 런타임) 등 포함되어 있습니다.
* 닷넷 프레임워크 구조
아래 그림은 닷넷 프레임워크의 구조도입니다. 이전에 살펴 보았던 닷넷 플랫폼 구조도에서 Visual Studio , 개발 언어등 몇가지가 빠진 모습을 나타냅니다.

웹 기반 개발을 위한 다양한 서비스 집합 및 윈도우 응용프로그램 기반 서비스들 그리고 Bass Class 라고
일컫어 지는 풍부한 API's 및 메모리 관리, 타입 안정성, 응용 프로그램 수명관리 등의 매커니즘을 가지고 있는
닷넷 실행환경인 CLR(Common Language Runtime)로 이루어 져 있음을 그림을 통해 알 수 있습니다.
* 언어 독립성
닷넷 프레임워크는 개발자를 위한 다양한 언어를 지원합니다. 즉 특정 언어만을 사용해야 한다는 기존의 규칙을 없애 버렸습니다.닷넷을 위해 설계된 C#은 물론이고 기존 비주얼베이직 개발자들을 위한 VB.NET, 자바개발자들을 위한
J# , C++ 개발자들을 위한 C++.NET 등이 있습니다.
닷넷 기반에서 작성된 응용프로그램을 실행하는 런타임은 하나인데 어떻게 이것이 가능할까요?
CLR이 모든 언어를 알아서 처리 해 줄까요??? 그렇지 않습니다.
사실은 각 언어별 컴파일러가 따로 존재합니다. 그리고 IL이라는 중간언어의 존재가 그 핵심이라 할 수 있습니다.
즉 어떤 언어로 작성되던 각 컴파일러가 동일한 IL코드를 만들어 줍니다. 따라서 닷넷 런타임은 동일한 IL코드만을
처리하면 되는 것입니다. 이런 매커니즘으로 하여 닷넷은 언어 독립성을 실행하였습니다.
아래 그림을 보실까요? (위키백과에서 발췌한 그림입니다)

* 공통 언어 런타임(CLR, Common Language Rumtime)
닷넷 응용프로그램의 실행을 담당하는 가상머신을 CLR 이라고 합니다.
CLR은 관리되는 코드로 작성된 응용프로그램의 실행을 총 관리감독하는 역할을 합니다.
응용프로그램의 메모리 관리 및 수명 관리, 타입 체크, 디버깅 환경등을 제공해 줍니다.
MSDN에서는 CLR을 다음의 문장으로 설명하고 있습니다.
"공용 언어 런타임은 언어 통합, 보안 적용 및 메모리/프로세스/스레드 관리와 같은 런타임 서비스를 담당하며 개발 시 수명 관리, 강력한 형식의 이름 지정, 언어 간 예외 처리, 동적 바인딩 등의 기능을 통해 개발자가 비즈니스 논리를 재사용 가능한 구성 요소로 변환하기 위해 작성해야 하는 코드의 양이 줄어들도록 도움을 줍니다"
다음 그림은 CLR의 구성요소를 보여주고 있습니다.
