# C#의 동작 원리
우리가 Visual Studio를 설치하면, .NET Framework가 설치된다.
.NET Framework가 설치되면, CLR이라는 일종의 가상 머신이 설치되는데
이 CLR이라는 가상 머신 위에서 C# 코드를 실행할 수 있게 된다.
CLS (.NET Framework 언어가 지켜야하는 언어 표준 규약)를 지키는 언어라면
어떤 언어라도 CLR 위에서 실행이 가능하다.
개발자가 C#으로 코딩을하고 실행하기 위해서는 컴파일을 거쳐야하는데,
이때 C# 컴파일러가 실행된다. (다른 언어라면 다른 컴파일러가 동작한다)
어느 언어를 사용하든, 컴파일된 IL 코드는 같다.
컴파일이 완료되면 MSIL (Microsoft Intermediate Language / 중간 언어) 로 변환된다.
여러가지 언어를 지원하기 위한 것으로, 다른 언어들도 공통적으로 중간 언어로 변환된다.
IL 코드 안에는 Meta Data와 Manifest 파일이 포함되어 있다.
(Manifest 안에는 어셈블리의 형식, 버전, 보안 요구 사항에 대한 정보들이 포함되어 있다)
그리고 프로그램이 실행될 때 이 IL 코드는 CLR에 있는
JIT Compiler에 의해 컴파일 되어 (JIT 컴파일 - 실행할 때마다 실시간으로 컴파일해서 실행)
해당 플랫폼에 맞는 원시코드로 변환되어 실행된다.
또한 CLR은 자동 가비지 수집 등의 역할을 수행하고,
CLR에서 수행되는 코드를 관리코드라고 하고,
CLR을 거쳐서 실행되지 않고, 특정 플랫폼에 맞는
원시 코드로만 컴파일되는 코드를 비관리코드라고 한다.
(IL 방식의 가장 큰 장점은 실행 머신 환경 (32/64 bit, x86/AMD)
관계 없이 동일 코드를 실행할 수 있다는 것)