Game Tech Blog

[Unity] IL2CPP 란? 본문

Unity

[Unity] IL2CPP 란?

jonghow 2024. 4. 1. 13:27
반응형

Keyword : C# , Mono, IL2CPP, AOT, JIT 

 

C# 은 .Net(MS) FrameWork 를 기반으로, 작성된 언어로, .Net 안에서 돌아갑니다.

그러나, 우리는 Unity로 게임을 만들면서 PC,AOS,IOS 등등 다 돌릴 수 있습니다.

이런 .Net이 지원안되는 환경에서도 돌아갈 수 있도록하기위해, Unity에서는 Mono 라는 것을 사용합니다.

하지만, Mono는 IL(Intermidiate Langauge)을 Runtime에 Native 하게 바꿔주는 Just-In-Time(JIT)을 사용합니다.

아무래도 게임을 시작하기 전 모든 내용을 Binary로 바꿔주지 않고, 그때그때 사용하다보니 성능 문제를 일으키기 때문에,

Unity는 AOT, Ahead-Of-Time 컴파일러인 IL2CPP를 도입했습니다.

 

Mono ? 

mono 는 .Net Framework 에 대응하기 위해 만들어진 오픈소스 입니다.

이 mono는 Aos,IOS, PS, XBox 등 타 멀티 플랫폼을 대응해서 C# 을 돌릴 수 있도록 해주었는데, 이제는 MS사에서 개발을 하게 되었습니다.

이 mono의 IL 을 Runtime에 Native로 변화시켜주는 JIT 방식을 사용합니다.

 

IL2CPP ?

IL2CPP는 C# 코드 -> C++ 코드로 변환해주는 AOT 컴파일러 입니다.

코드는 C# -> C++ -> Device Native 코드로 변환되는데, 이 방식은 미리 모두 변환을 해놓기 때문에, JIT 컴파일러보다 빠르며, 메모리 사용량도 줄어듭니다.

 

IL2CPP는 Unity에서 IOS,AOS,WebGL, SamsunTizen과 같은 여러 플랫폼에서 사용한다고 알려져 있습니다.

 

우리가 개발을 하면서 1가지 방식만 필요한 것이 아니라, AOT, JIT 두 방식 모두 필요로 하는데, 

AOT 는 미리 모든 C# -> C++ -> Target Device Native Code 과정을 수행하는데 있어서 당연히 빌드 시간이 오래 걸릴 수 밖에 없는 반면,

JIT 은 필요할 때 실시간으로 C++ -> Native Code로 변환할 때도 있고, 어느정도는 이미 수행해놓은 상태라고는 하는데, 추론시간이 더 걸린다고도 합니다. 

 

그리하여 개발할때는 Fast build 옵션을 선택해서 JIT 방식으로 생산성을 취하며, 성능이 필요하거나 중요한 빌드 일때는 IL2CPP를 이용해서 빌드가 오래걸리지만 최상의 성능을 이끌어 낼 수 있도록 선택할 줄 알아야합니다.

 

 

 

반응형
Comments