본문 바로가기

C#

C#의 배경


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가 실행되는 방식입니다.

'C#' 카테고리의 다른 글

C# 클래스  (0) 2012.01.17