1.1 닷넷(.NET)
.NET이란?
- 좀더 쉽게 어플리케이션을 개발할 수 있는 환경으로 모든 것을 포괄 하고 있는 이상적인 개발환경을 제공합니다.
- 닷넷은 개발과 실행환경을 통일시킨다는 의미을 내포하고 있는데 이 말은 어떠한 언어로 개발하든 모두다 하나의 언어로 번역해 동작하겠다는 뜻 입니다.
.NET Framework란
- .NET Framework는 클래스 라이브러리(Class Library)와 공통 언어 런타임(Common Language Runtime)으로 구성되어 있습니다.
- 여기서 라이브러리란 프로그램을 만들 때 자주 사용되는 명령어나 부분 프로그램을 모아 놓은 것으로 언제든지 필요할 때 자유롭게 이용할 수 있는 것 이라고 생각하시면 됩니다. 라이브러리를 도서관이라고 생각하면 더 쉽게 이해 하실수 있을 것 입니다.
- CLR(공통 언어 런타임)은 .NET에서 프로그램을 로딩하고 컴파일 해줍니다. 즉 실행환경을 제공합니다.
.NET의 특징
- 플랫폼의 독립성으로 닷넷 프레임웍만 설치되어 있으면 어떠한 운영체제에서도 닷넷 프로그램이 동작할 수 있습니다.
- 닷넷 환경에서 다양한 언어를 수용해 하나의 언어로 번역하기 위해서는 표준이 있어야 합니다. 이러한 닷넷의 서로 다른 언어들이 지켜야 하는 표준 스펙을 CLS(Common Language Specification)라고 합니다. 즉 CLS의 규칙을 지키는 언어는 닷넷에서 번역하고 실행될 수 있습니다.
- 서로 다른 언어로 작성되었다하더라도 호환성이 뛰어나 서로 호환되어 동작할 수 있습니다.
1.2 닷넷 언어의 핵심
중간언어(Intermediate Language)
- 중간언어는 기계어로 변환하기 전단계의 언어로 기계어로 변환하기 쉬운 상태의 중간 단계의 언어입니다.
– 아래의 그림에서 보는 바와 같이 여러 언어로 작성된 코드를 컴파일하면 모두다 중간언어로 컴파일 됩니다. 이렇게 중간언어로 컴파일된 결과 파일을 닷넷에서는 어셈블리(Assembly)라고 부릅니다.
CLR(Common Language Runtime)
- 닷넷에서 프로그램을 로딩하고 동적 컴파일하며 실행하고 메모리 관리도 해주는 가상적인 운영시스템입니다.
- 아래의 그림을 하나하나 살펴보면 우선 개발자가 닷넷 코드를 사용하여 프로그램 소스 코드를 개발합니다. 각 언어별 컴파일러가 존재 하는데 만약 C#으로 작성된 소스 코드면 C# 컴파일러(csc.exe)가 컴파일을 수행합니다. 컴파일의 결과물로 어셈블리가 나옵니다. 지금까지는 컴파일 환경이었고 이제 실행환경인 CLR 영역에 대해 알아보겠습니다.
- CLR에서는 컴파일의 결과물인 어셈블리를 컴퓨터가 이해할 수 있도록 기계어로 변환합니다. 이 역할을 수행하는 것이 JIT 컴파일러(Just-In-Time) 입니다. 즉 CLR 안에 있는 JIT 컴파일러를 통해 실제 컴퓨터의 비트신호(10010011...)로 바꾸어 컴퓨터가 소스코드를 이해할 수 있게 합니다.
JIT(Just In Time)
- 중간언어를 컴퓨터가 이해할 수 있도록 0100111100...같은 기계어(Native Code)로 변환하는 역활을 수행합니다.
닷넷의 컴파일과 실행
- 컴파일 : 소스 코드를 중간언어(IL) 형태로 만드는 것을 말합니다.
- 실행 : 중간언어(IL)를 JIT가 재컴파일하여 .NET 환경의 CLR이 실행시킵니다.
-> 즉 개발자가 작성한 소스 코드를 중간언어로 컴파일해서 다음 기계어로 완전히 만들기위해 JIT가 컴파일해서 CLR이 실행시킨다고 보시면 됩니다. 즉 작성된 프로그램을 실제로는 총 두번의 컴파일을 통해 실행이 되는 것 입니다.
1.3 .NET과 언어
C# - 닷넷 기술 중심에 있는 언어로써 닷넷 기술을 제대로 구현하기 위한 언어입니다.
컴파일 언어 – 프로그램을 한꺼번에 기계어로 변환해서 사용하는 것으로 C#이 대표적으로 러한 컴파일을 통해 실행됩니다.
인터프리터 – 한줄씩 진행해 나가며 필요한 코드를 기계어로 해석해서 실행하는 방식으로 인터프리터는 Java가 실행되는 방식입니다.