유튜브에서 오라클 자바 커뮤니티라는 채널에서 C#에 관련한 무료강의를 제공하고 있었다.
C#을 사용하는 개발자인데, 어떤 구조로 돌아가는지는 적어도 이해하고 있어야 한다고 생각했고, 앞으로 익혀가겠지만, 자주쓰이는 문법들도 익혀야한다고 생각했다.
이 시간에 잘 학습하고 정리하려고 한다.
닷넷(.NET)
닷넷이란?
마이크로소프트에서 개발한 프로그램 개발 및 실행 환경이다.
CLS(Common Language Specification)은?
닷넷 컴파일러가 지원해야하는 최소한의 표준규약으로 C#.NET, VB.NET C++.NET 등 닷넷 프레임워크 언어가 반드시 지켜야 하는 언어 스펙으로 CLS를 따르는 언어라면 어떠한 언어라도 닷넷 프레임워크에서 실행 가능하다.
CLR(Common Language Runtime)은?
닷넷 언어의 컴파일된 자원들은 CLR이라는 독립적인 환경에서 실행된다. 즉 소스코드를 컴파일 하면 닷넷 어셈블리가 되는데, 이 어셈블리가 CLR 위에서 동작한다. 사용자가 컴파일된 중간언어 파일인 .exe를 실행하면 CLR이 메모리에 로드되고 .exe를 번역하여 기계어(머신코드)로 변환 후 OS위에서 실행을 한다.
.NET 이 제공하는 language 들이 Compile 되면 IL ( Intermediate Language ) 라는 중간 언어로 작성된 파일을 만들어 낸다. 그리고 이 어플리케이션이 실행 될 때 CLR 이 중간 언어를 읽어들이고, 기계어로 번역하고, JIT ( Just In Time ) 컴파일을 하여 네이티브 코드로 만들어 실행한다.
네이티브 코드란 ?
CPU와 운영체제(os)가 직접적으로 실행할 수 있는 코드들을 말한다.
정리하면
C# 컴파일러는 C# 소스코드를 컴파일하고 ,IL이라는 중간 언어로 작성된 실행 파일을 만든다. 그리고 사용자가 이 파일을 실행시키면, CLR이 중간 코드를 읽고, 하드웨어가 이해할 수 있는 네이티브 코드로 컴파일 한 후에 실행하게 되는 것! 이것을 JIT 컴파일이라고 한다.
즉, 실행에 필요한 코드를 실행할 때마다 실시간으로 컴파일해서 실행한다는 의미
해당 언어로 쓰여진 코드를 CLR이 자신이 설치되어있는 플랫폼에 최적화 시켜 컴파일 한 후에 실행한다!