2013년 8월 9일 금요일

[오라클자바커뮤니티, 닷넷강좌, 자바교육].NET CLR(Common Language Runtime)

마이크로소프트 닷넷기반의 C#으로 프로그래밍을 하기 위해서는 우선 그 환경(닷넷 프레임웍)에 대해 이해가 우선 해야 합니다. 그래서오늘은 CLR(Common Language Runtime)이라는 것에 대해 알아보도록 하겠습니다.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  




CLR은 하부구조로 OS를 가지며 OS 위에서 닷넷 Application을 실행 할 수 있게 해주는 아주아주 중요한 것입니다. 이것때문에 닷넷 환경하에서 어떠한 언어로 개발하든지 컴파일된 파일은 같은 모양을 가지며 결국 이 컴파일된 파일들은 CLR 위에서 여러가지 라이브러리등을 참고해서 실행 하게 되는 겁니다. 자바라는 언어로 본다면 자바가상머신(JVM) 이라고 보시면 됩니다. 자바에서도 이 JVM때문에 플랫폼 독립적인 자바의 특징, 어떠한 OS 기반위에라도 JVM만 있으면 자바프로그램이 동작하는 것이 가능 했던 겁니다.
아래에서 닷넷 환경 하에서 프로그램이 실행되는 형태를 보도록 하겟습니다. 자바에서는 .java 파일이 .class 파일로 바뀌고 이것이 JVM에 로딩되어 실행되는 구조이죠, 그런다음 JVM에서는 자바바이트 코드를 하나씩 해당 OS의 기계어(Native Code)로 번역을 하는 겁니다. 물론 번역을 그때그때 하면 JIT(Just-In-Time) 이라고 하고 병목현상이 일어날것





CLR에 대해 간단히 설명드리면 아래와 같습니다.
? The CLR defines the Common Type System (CTS)
? All languages built on the CLR use the CTS

? Types are divided into two categories
1. Value types:
- Relatively simple types
- Typically allocated on the stack
2. Reference types:
- More complex types
- Allocated on the heap
- Destroyed through garbage collection
CLR은 CTS라는 것을 정의하는데 무엇인고 하니 C#이든 VB.Net이든 동일한 형태의 데이터 타입을 사용하는 겁니다. 예를들면 System.Int32라는 Class는 int형을 이야기 하는데
(int i=0; 또는 System.Int32 i=0; 둘다 같은 의미 입니다.)
C#이나 VB.Net등 어떠한 닷넷 언어에서든 공통으로 사용한다는 이야기 입니다. 과게에 C언어에서 Int형은 2바이트 또는 4바이트로 고정된것은 아니었습니다. 즉 32비트가 1워드이면 4바이트, 16비트가 1워드이면 2바이트 등으로 타입이 고정되지 않아 타입 안정성이 떨어 졌으니까요. 그래서 닷넷은 공용의 데이터 타입을 정의한거죠...물론 일반적인 원시데이터 타입(int, float, long등)은 Value Type이라고 하여 Stack에 저장되고 객체등은 Reference Type이라고 새서 Heap에 저장 됩니다.
CTS의 구조를 아래에서 보도록 하죠^^; (Value-Type이든 Reference Type이든 모드 객체 입니다. 위에서 말씀드린것과 같이 int 형은 System.Int32라는 클래스 타입이죠)



오늘 자바에서의 JVM과 같은 닷넷에서의 CLR에 대해 살펴 보았습니다. 어렵게 보일지는 모르지만 자바의 특을 어느정도 이해하고 계신다면 닷넷은 껌입니다. 항상 자바+알파 이니까요... 또한 CLR은 BCL(BAse Class Library)라고 해서 닷넷에서 사용되는 1000여가지의 클래스를 지웝합니다. 즉 C#이든 VB.Net이든 이 클래스는 똑같이 가져다 쓸수 있고 이름또한 같이 사용한다는 이야기 입니다. 아래의 예를 비교해 보세요...(결국 같은 Class를 이용하는 겁니다. 참 공부하기 편하죠^^;)

C# .Net 에서 MDB에 접근할려면 아래와 같이 합니다.

string CnString ="Data Source=student.mdb; Provider=Microsoft.Jet.OLEDB.4.0;"; OleDbConnection objConnection = new OleDbConnection (CnString);
objConnection.Open();
한편 VB.Net에서는
dim strConnection = "Data Source=student.mdb; Provider=Microsoft.Jet.OLEDB.4.0;"
dim objConnection as new OLEDBConnection(strConnection)
objConnection.open()







댓글 없음:

댓글 쓰기