애플 iOS 기기 대상으로 유니티엔진에서 빌드 할 때 필수적으로 사용되어야하는 기술이다.

왜냐하면 iOS기기는 무조건 64비트를 지원하는 앱만 앱스토어에 등록할 수 있다.

하지만 Mono로 빌드시에는 64비트를 지원하지 않기 때문에 실제로 iOS 게임을 만들기 위해서는 필수적으로 선택해야하는 기술이다.

IL2CPP는 무엇인가?

간단하게 말하면 IL코드를 C++코드 형태로 변환하는 프로그램이다.

Mono환경에서는 일반적으로 유니티에서의 MonoFramework에서는 C#코드를 msc.exe라는 프로그램에 의해서 IL코드라는 중간언어로 변환이 된다. (Java언어의 바이트코드와 비슷한 개념이다)

이는 Assembly코드와 형태는 비슷하지만, 이거 자체로 기계에 들어가는것만으로 실행은 되지 않는데, 이러한 IL코드를 Assembly(Binary)로 변환하는 프로그램이 Mono라는 프로그램이다.

이 Mono라는 프로그램이 IL코드를 한줄씩 읽어서 그걸 해당 디바이스에 맞는 기계어로 변환하여 실제 디바이스에서 프로그램이 동작하게 된다. 이러한 일련의 과정은 JIT(Just In Time)컴파일이라고 한다.

IL2CPP도 일단은 먼저 msc.exe를 통해서 IL코드를 생성한 후, 생성된 IL코드를 C++형태로 변환한다.

현재 모든 컴파일러들은 대부분 C++를 이용해서 기계어를 생성할 수 있기 때문에 한줄한줄 읽어서 변환하는 JIT컴파일링과는 다르게, 이미 모든 것이 디바이스에서 인식할 수 있는 기계어로 변환되어있기 때문에 실행중에 IL코드를 해석하는 오버헤드가 줄어듦으로 이해 훨씬 성능은 좋아진다.

이러한 컴파일 방식을 AOT(Ahead-Of-Time)컴파일링이라고도 한다. (실행전에 모든걸 다 기계어로 해석)