IL2CPP, MONO, AOT, JIT 여러 줄 정리
[유니티 TIPS] 알고 있으면 쓸데 있는 IL2CPP, Mono, AOT, JIT 개념 파헤치기
1. 유니티 엔진 내부는 C++로 짜여있다. 유저 코드 부분만 C#으로 짜여있다. 따라서 유저 코드 부분에서만 C#사용으로 인해 속도가 느리다.
2. IL2CPP로 빌드하면 유저가 쓴 코드도 CPP로 변환된다.
3. C#을 컴파일하면 IL코드가 생성되고, MONO는 IL코드가 다시 여러 플랫폼에서 돌아갈 수 있게 해준다.
4. Mono는 IL코드를 그때그때 컴파일한다. 즉 JIT방식이다.
5. JIT방식은 인터프리터보다는 빠르다. JIT은 인터프리터와 달리 중간 처리된 코드(IL코드)를 컴파일 하기 때문
6. IL2CPP역시 Mono같은 역할을 수행한다. IL코드를 여러 플랫폼에서 돌아갈 수 있게 해주는 것.
7. IL2CPP는 AOT방식이다. 즉, 미리 모든 코드를 컴파일해둔다. 따라서 성능은 JIT보다 좋지만 빌드가 오래 걸린다.
8. 유니티는 에디터에서는 Mono를 사용한다. 빌드를 할 때는 IL2CPP를 사용한다면 생산성과 성능을 잡을 수 있다.
9. C# 코드를 CPP로 변환하는 과정에서 문제가 몇 개 있는데 대표적인 게 Generic Sharing이다.
10. 일반적으로 제네릭을 사용하면 사용한 타입별로 코드를 다 생성하지만, 레퍼런스 타입에 한하여 하나의 공유 코드를 사용하도록 할 수 있는데 이것이 Generic Sharing이다.
11. JIT은 Generic Sharing이 있어도 그때그때 코드를 만들 수 있는 반면에, AOT방식으로 이걸 하려면 모든 코드를 생성해야 해서 코드 사이즈가 확 늘어난다. IL2CPP 변환 과정을 오래 걸리게 하는 주범.