Mono
.NET 프레임워크의 오픈 소스 구현체로, C# 코드를 실행하는 데 사용됩니다.
- 크로스 플랫폼 호환성: Mono는 여러 플랫폼에서 동작하므로 유니티에서 다양한 플랫폼에 배포할 때 호환성이 높습니다.
- 유연성: C# 언어를 사용하여 스크립트를 작성할 수 있으며 유니티와 통합이 잘 되어 있습니다.
- 성능: Mono는 Just-In-Time (JIT) 컴파일러를 사용하므로 런타임에 코드를 컴파일합니다. 일부 상황에서 성능 저하를 야기할 수 있습니다.
- 메모리 사용량: JIT 컴파일은 메모리 사용량을 늘릴 수 있습니다.
- 안정성: Mono의 디컴파일이 쉬워 보안 이슈가 발생할 수 있습니다.
IL2CPP
'Intermediate Language to C++'의 약자로, C# 코드를 네이티브 C++ 코드로 변환하여 실행합니다.
- 성능: 네이티브 코드를 사용하기 때문에 성능이 향상됩니다. 특히 모바일 플랫폼에서 더욱 효과적입니다.
- 애플리케이션 크기: IL2CPP는 더 작고 빠른 코드를 생성하여 애플리케이션의 크기를 줄일 수 있습니다. 그러나 상황에 따라 크기가 증가할 수도 있습니다.
- 보안: 네이티브 코드는 일반적으로 보안이 더 뛰어납니다.
- 빌드 시간: 코드를 C++로 변환하는 과정이 추가되기 때문에 빌드 시간이 증가할 수 있습니다.
Mono와 IL2CPP의 비교
유니티와 컴파일 방식
유니티는 JIT 컴파일 방식과 AOT 컴파일 방식을 모두 지원합니다.
- Mono Framework (JIT Compile): Mono Framework에서는 JIT 컴파일 방식을 사용합니다. 여기서는 CIL(Common Intermediate Language)로 변환된 코드를 실행하기 전에 런타임 시에 JIT 컴파일러가 이를 네이티브 기계어로 변환합니다. 이러한 과정을 통해 플랫폼에 독립적인 코드를 생성하고 실행할 수 있습니다.
- IL2CPP (AOT Compile): IL2CPP에서는 AOT 컴파일 방식을 사용합니다. 여기서는 CIL 코드를 C++ 코드로 변환한 후, C++ 컴파일러를 사용하여 기계어로 컴파일합니다. 이 과정을 통해 미리 컴파일된 네이티브 코드를 생성하므로, 실행 시간을 단축하고 성능을 향상시킬 수 있습니다.
따라서, 중간 언어를 거치느냐 안 거치느냐의 차이가 두 방식의 핵심적인 차이입니다. IL2CPP는 특히 iOS와 같이 AOT 컴파일을 요구하는 플랫폼에서 필수적으로 사용됩니다.