IL2CPP
단어 뜻만 보자면
IL to CPP
유니티에서 사용하는 중간 언어(Intermediate Language) 를 C++ 코드로 변환한다는 뜻
IL2CPP는 .NET 환경을 지원하지 않는 플랫폼에서 게임을 실행할 수 있도록 지원한다.
진행 방식은
아래 처럼 코드를 작성했다고하면
public int Add(int a, int b)
{
return a + b;
}
아래 처럼 중간언어(IL)로 변경 후 C++언어로 다시 변경하는 방식이라고 한다
.method public hidebysig instance int32 Add(int32 a, int32 b) cil managed
{
// Code size 7 (0x7)
.maxstack 2
.locals init (int32 V_0)
IL_0000: nop
IL_0001: ldarg.1
IL_0002: ldarg.2
IL_0003: add
IL_0004: stloc.0
IL_0005: br.s IL_0007
IL_0007: ldloc.0
IL_0008: ret
}
(위 IL코드를 예시 CPP코드로 변경한다면 코드가 매우 복잡하다기에 어떻게 되는지 파악하지못했다)
IL2CPP의 빌드 시
장점
1. 코드를 난독화하기 때문에 코드를 리버스 엔지니어링 하거나 수정하기가 어려워진다.
2. .NET환경이 아닌 다양한 플랫폼을 지원 (모든 플랫폼을 지원하는건 아님)
3. 런타임 성능이 빨라지고 메모리 사용량의 감소를 기대할 수 있다
단점
1. C#코드를 CPP코드까지 변환하기때문에 프로젝트의 크기가 커질수록 빌드시간이 늘어난다.
2. 빌드 파일의 크기가 Mono 빌드에 비해 더 크다
3. 외부 라이브러리 사용 시 IL2CPP 대응이 되지 않는다면 빌드 시 어려움을 겪을 수 있다.
**위와같은 장단점이 있지만 그럼에도 불구하고 IL2CPP를 사용해야하는 이유는..
애플의 정책에 따라 Ahead-of-Time (AOT) 방식을 사용해야 하기 때문이다..
(빌드를 하고 스토어에 출시하기 위해선...IOS도 생각해야하니...)
IL2CPP는 AOT빌드 방식을 사용
Mono는 JIT빌드 방식을 사용
*AOT (Ahead-of-Time)
프로그램 실행 전에 컴파일을 미리 수행하여 기계어로 변환하는 방식
*JIT (Just-In-Time)
프로그램 실행 시점에 바이트코드를 기계어로 번역하여 실행하는 방식
'프로그래밍 > Unity3D' 카테고리의 다른 글
Unity - Sprite Atlas 왜 사용할까? (0) | 2023.10.30 |
---|---|
Unity - 가비지 컬렉터 (Garbage Collector) (1) | 2023.10.24 |
Unity UI 최적화 (UGUI Optimization) (0) | 2022.08.24 |
Rider를 소개합니다 (0) | 2022.08.21 |
Unity Cache Server (유니티 캐시서버) (0) | 2021.12.24 |