본문 바로가기

Sumer/.NET

닷넷의 형

앞전 boxing upboxing에서 값 형식 과 참조 형식에 대한 언급이 있었습니다.

그럼 값 형식과 참조 형식이란 무엇 일까요?

닷넷 프레임워크에서 형식이 무엇 인지 알기 위해 먼저 닷넷 프레임워크의 형식의 모든 것인 Common Type System(이하 CTS) 을 살펴 봐야 합니다..

CTS 란 런타임에서 형식을 선언하고 사용 및 관리하는 방법을 정의할 뿐 아니라 언어 간 통합에 대한 런타임 지원의 중요한 부분을 차지 합니다.

위 내용은 msdn CTS 의 개요 내용입니다.

Boxing , unboxing 또한 CTS에서 제공하는 기능입니다.

CTS 의 가장 중요한 역할은 실제 애플리케이션이 실행 할 때 애플리케이션의 형식(type)의 사용과 관리를 하는 것 입니다.

형식(type)이란 런타임시 메모리 공간에 탑재될 데이터의 형태를 말 합니다.

가령 int 형의 변수를 선언하여 실제 구동하게 되면, 런타임에서는 선언된 int을 사용하기 위해 CTS OS에게 메모리 상에 32bit 크기의 공간을 요청 하게 됩니다.

그렇게 OS에게 요청 된 것은 OS의 알고리즘에 따라 추상적인 메모리공간이 활당 되게 되며 활당된 메모리 공간에 데이터를 바인딩 하게 됩니다.

또한 메모리상의 바인딩 데이터를 사용할때도 CTS 는 적당한 방법으로 데이터를 해석하여 사용가능하도록 합니다.

부동소수점 형태의 경우 32bit 크기의 메모리공간을 요청하지만 사용방법은 int 형과 완전이 틀립니다. Int 의 경우 32bit 전체 공간에 정수를 저장 하지만 부동소수점 형 은 32bit 공간중 일부 구간을 소수점 이하 자리를 위한 공간으로 사용하게 됩니다.

소수점 이하 몇자리 까지 사용할 건지에 따라 정밀도라 부르며, 닷넷에서 지원하는 부동 소수점 형태는 msdn 을 참조 하면 정확하게 확인 할수 있다.

이처럼 CTS는 메모리의 사용과 관리에 관한 일을 주 임무로 하고 있습니다.
그리고 CTS는 형 안정성을 추구 하기도 합니다. 형 안정성은 형의 사용에 있어서 문제가 발생 할 수 있는 코들를 컴파일러 에서 확인 가능하도록 하며, 최악의 경우에도 런타임시 예외나 오류의 발생으로 혹시 있을지 모를 데이터의 손상을 막아 주는 기능 입니다.

모든 소프트웨어 컴파일러 및 개발 언어들은 자체의 Type System을 제공 하고 있으며, 각 형태는 언어 마다 특이 점들이 많습니다.

루비 같은 경우 모든 타입을 참조형으로 보며, 타입들의 변환이 매우 자유로운 환경을 제공 하고, 자바 스크립트 같은 경우 형의 선언 없이 사용가능한 방법을 제공 하기 도 합니다.

닷넷 이전까지의 Type System 은 프로그램 언어의 컴파일러 기능으로 각 언어별 정수를 나타내는 int 형이라고 할지라도 그 사용 방법이나 관리 방법의 차이로 호환이 불가능 했습니다.

하지만 닷넷 에서는 Type System을 프레임워크의 기능으로 탑재 하여 각 닷넷을 지원하는 언어들이 아무런 문제없이 서로의 데이터 형을 이용 가능 하도록 하였습니다.

그래서 앞에 Common이 붙은 거겠죠.

이렇게 CTS가 사용 및 관리한는 형은 크게 값 형과(value Type) 과 참조 형(Reference Type) 으로 분류 할 수 있습니다.

대충 CTS가 무엇인지 설명 드렸습니다만 Type System에 관련된 내용은 컴파일러 및 OS와 프로그램의 런타임과도 많은 관련이 있어 자세히 설명 하지 않았습니다.(사실 설명하기에는 아직 제 지식이 …) 그럼 다음 시간에 CTS의 값 형식에 대해서 알아 보겠습니다.


모두에게 행운이 있기를