본문 바로가기
Unity 게임 개발/Unity IL2CPP

유니티 성능향상 - IL2CPP 1: C#과 C++의차이

by daisy0461 2022. 3. 30.

유니티 성능 향상을 공부하다가 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#으로 프론트엔드를 많이 개발한다.