유니티 성능 향상을 공부하다가 IL2CPP라는 것을 알게 되었다. 이 기능을 공부하기 위해
https://youtu.be/-9X965jXrn8
을 참고해서 블로그 글로 남긴다.
다들 알고 있겠지만 C#은 C++보다 느리다는 인식이 있다. 그래서 Unity도 C#을 사용하기 때문에 느리다는 인식이 있는데 그 말은 틀린 말이다. Unity내부 엔진은 C++로 되어있다. 그렇기에 Unity가 느리다는 말은 틀렸다. 유저에게 노출되는 api부분만 C#으로 되어있다. 겉은 C# 안은 C++로 되어있는 것이다.
요즘 IL2CPP라는 말을 많이 들어보았을 것이다, 이것이 도입되면서 게임 엔진 내부 뿐만 아니라 유저 코드 부분도 C++로 돌릴 수가 있다. 즉, 게임엔진과 유저코드 모두 C++로 돌아가기 때문에 전반적인 게임 성능이 증가한다. 이제 이 IL2CPP에 관해 설명하겠다.
먼저 C#과 C++의 차이에 대해서 설명을 해본다면 처음에 C언어가 있는데 저와 같은 게임 개발을 하는 경우에는 거의 사용하지 않고 C#또는 C++을 자주 사용한다.
C에서 C++이 되면서 객체지향이 적용되기 시작했고 class라는 것이 도입되기 시작했다. 그리고 C++의 경우 메모리 관리를 직접 해줘야한다. new로 생성하고 꼭 delete해줘야한다. 대부분 C++이어렵다고 하는 이유는 이 메모리 관리 떄문이다. 마찬가지로 쓰레드도 사용자가 고민을 해야할 부분이 많다.
C#은 MS에서 .Net 프레임워크 기반으로 돌아가는 언어를 개발한 것이다. 이 C#은 C++에 비해서 생산성이 좋다. 그 이유는 메모리 관리를 C#이 직접해주기 때문이다. C#에서는 new로 메모리를 생성하면 나머지는 C#이 알아서 GC(Garbage Collector)를 통해 메모리를 해제한다. 이 GC덕분에 메모리 관리가 훨씬 쉬워졌고 쓰레드 같은 경우에도 사용자 입장에서 되게 쉬워졌다. 개발이 C++에 비해 굉장히 쉬워진다.
즉, C++ 과 C#의차이점은 메모리 관리 측면이 크다. 이 메모리 관리로 인해 C++보다 C#이 더 생산성이 좋다.
하지만 C#의 GC가 C#에서 알아서 메모리 관리를 하기 때문에 (이것을 Managed Memory라고 한다.) C#이 개입하는것이 많아지니 C++에 비해 성능 저하가 발생한다.
이 C#의 장점인 생산성과 단점인 성능저하를 비교해보았을 때 생산성에서 얻어지는 이득이 더 크기 때문에 C#으로 프론트엔드를 많이 개발한다.
'Unity 게임 개발 > Unity IL2CPP' 카테고리의 다른 글
유니티 성능향상 - IL2CPP 4: IL2CPP의 제한사항 (Generic) (0) | 2022.04.03 |
---|---|
유니티 성능향상 - IL2CPP 3: IL2CPP란? (2) | 2022.04.01 |
유니티 성능향상 - IL2CPP 2: mono, JIT방식, IL이란? (0) | 2022.03.31 |