언어 자료구조 알고리즘/C# 언어 문법

5. .NET Framework

언제나휴일 2009. 8. 19. 05:47
반응형
.NET Framework

 

 

다루는 내용

  - .NET Framework 개요

  - CLR(Common Laguage Runtime, 공용 언어 런타임)

  - CTS(Common Type System, 공용 언어 시스템)

  _ CLS(Common Language Specification, 공용 언어 사양) 

 

 C# 프로그램은 .NET Framework기반에서 실행이 됩니다.  C#컴파일러는 .NET 어셈블리(.NET 가상머신에서 동작 가능한 바이너리)를 생성하고 CLR이라는 가상 실행 시스템이 .NET Framework의 일부분인 통합된 클래스 라이브러리와 결합하여 네이티브 기계어(실제 시스템에 맞는 기계어)를 생성을 해 줍니다.  그리고, 통합된 클래스 라이브러리는 다양한 언어로 제작된 프로그램에서 사용할 수 있는데 이를 위해 국제 표준 CLI(공용 언어 인프라)를 MS에서 상용화시켰습니다.

 

1. CLR

.NET 프로그램들은 런타임에게 기능을 노출하여 관리가 됩니다.  이러한 코드를 관리 코드(Managed Code)라 부릅니다.  

.NET 프로그램들이 기능을 노출할 수 있는 것은 C# 컴파일러가 사용자 코드의 형식, 멤버 및 참조를 기술한 메타데이터를 포함한 .NET 어셈블리를 생성해 주기 때문입니다.  이러한 .NET 어셈블리를 CLR은 런타임에 메타데이터를 사용하여 클래스를 찾고 로드하여  메모리에 인스턴스를 배치를 하고 수명이 다한 개체들을 가비지 수집에 의해 소멸을 시켜줍니다.  이러한 이유로 C#에서는 인스턴스의 생성은 사용자 코드에 의해 생성 시점이 결정되지만 소멸자를 호출을 하지 않아도 메모리 누수가 발생하지 않는 것입니다.

 

CLR로 인한 장점

 - 보다 더 OOP적이다.

 - 다른 언어로 개발된 구성 요소를 쉽게 사용할 수 있다.

 - 인스턴스의 관리로 인한 메모리 누수 방지

 - 자기 설명적인 .NET 바이너리로 인한 side-by-side 실행 

 - 구조적 예외 처리 

 

2. CTS

 CTS는 런타임에 형식을 선언하고 사용 및 관리하는 방법을 정의하고 있으며 형식의 범주로는 value(값) 형식과 Reference(참조) 형식이 있습니다.

 

값 형식은 데이터를 직접 포함하며 인스턴스가 스택에 할당이 됩니다.(구조체는 인라인으로 할당됩니다.)

참조 형식은 메모리 주소에 대한 참조를 갖고 있으며 관리(Managed) 힙에 할당됩니다.   

 

 위 그림에서 기본 형식은 System 네임스페이스에 정의된 형식들 중에 object와 string을 제외한 형식을 얘기를 합니다.

그리고 사용자 정의 value 형식으로는 C#언어에는 구조체가 있습니다.

 

 참고로 MSDN에 보면 CTS에서는 형식을 Value 형식과 Reference 형식으로 크게 분류를 하고 C#에서는 Value 형식, Reference 형식, Pointer형식으로 분류를 해 놓았습니다.  즉, C#에서는 Pointer를 Reference 형식의 범주에 넣지 않고 별도의 범주로 두고 있습니다.  위의 그림은 MSDN에 CTS에 대한 언급속에서 나온 형식 분류 그림을 기반으로 작성했습니다.

 

CTS로 인한 장점

  - 언어 간 호환성 있는 컴포넌트 제작이 용이

  - 성능 향상 

 

3. CLS

 .NET 어셈블리가 자기 설명적이고 CLR에 의해 관리를 함으로써 언어 간 상호 운용을 기본적으로 제공하고 있습니다.  하지만 각 프로그래밍 언어에 따라 CTS에서 제공되지 않는 형식들을 가지고 있기 때문에 따라야 할 규칙이 필요합니다.  이러한 언어 상호 운용을 위해 정의된 규칙을 CLS라 합니다.

 

언어 간 상호 운용을 위해 지켜야 할 기본적인 CLS

 

외부에 노출되는 형식은 CLS를 따라야 한다.
모든 전역 멤버(정적 멤버 포함)는 CLS를 따라야 한다.
리턴 타입 및 매개 변수 형식은 CLS를 따라야 한다.
기본 형식중에 Byte, Int16, Int32,Int64,Single, Double, Boolean, Char, Decimal, IntPtr은 CLS 규격이다.
String은 CLS 규격이다.
Boxed value 형식은 CLS 규격이 아니다.
포인터 형식 및 함수 포인터 형식은 CLS 규격이 아니다.
base클래스도 CLS를 따라야 한다.
배열의 원소는 CLS 규격을 따라야 한다.
배열의 크기는 고정되어야 한다.
열거형의 내부 형식은 CLS 정수 형식이어야 한다.

 

다음과 같은 attribute를 지정함으로써 컴파일 시 CLS를 따르지 않는 부분을 점검할 수 있습니다.

[assembly: CLSCompliant(true)]

 

Look & Feel & Think

 

외부 노출 메소드내에 있는 CLS규격을 따르지 않는 형식을 반환을 해야 한다면 CLS규격을 따른 형식으로 변환하여 CLS규격을 따르도록 하자. 

  

 

 

반응형

'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글

11.Class  (0) 2009.08.19
10.Casting  (0) 2009.08.19
9.String  (0) 2009.08.19
8. Object  (0) 2009.08.19
7. 배열  (0) 2009.08.19
6. valuetype 기본 형식  (0) 2009.08.19
4. const 와 readonly  (0) 2009.08.19
3. 소멸자  (0) 2009.08.19
2. 생성자  (0) 2009.08.19
1.Welcome! Here is ehclub.net  (0) 2009.08.19