사진의 모든 출처는 Unity Korea이다
NO!!!!
유니티의 내부 엔진은!! C++로 되어 있다!!!
흔히 게임엔진을 자동차로 비유하는데 엔진 내부는 C++로 되어 있고
유저에게 노출되어 있는 유저 스크립트들은 C#으로 작성할 수 있다!!
IL2CPP가 도입되고 나서부터 유저 코드 부분도 C++로 작성할 수 있게 되었다
IL2CPP를 알기 위해서는 C#과 C++의 차이점을 알아야 한다
C++은 객체지향 즉, Class가 생겼으며 메모리 할당과 삭제를 유저가 직접 해주어야 한다
C#은 MS에서 개발한 .Net Framework기반으로 돌아가는 언어임, C++보다 생산성이 높은데 그 이유는 메모리 관리를 자동적으로 해주기 때문임!(가비지 컬렉터!)
Mono같은 경우 .Net Framework를 대응하기 위해 만든 언어임
멀티플랫폼을 지원해주는 언어! C#을 돌리게 해준다!
C#으로 개발하고 Mono을 통해 거쳐가면 IOS, Android에서 돌릴 수 있다!
C#을 Mono로 띄우기 위해선 IL로 중간언어로 변환해주어야 한다(닷넷어셈블리)
IL이 런타임으로 파싱됨 -> JIT방식(Just In Time) 필요할 때 컴파일함
결론적으로 IL2CPP는 IL을 C++ 로 바꿔주는 거다(Unity에서 만듦)
C++로 만들게 되면 안드로이드폰, 애플폰에서 사용할 수 있게 된다
C++로 바꾸면 멀티플랫폼 대응가능하고, 속도도 좋음
결론 C# -> IL -> Mono(JIT) or C++(AOT)
에디터는 Mono로 돌림!!!!
빌드할때는 C++로!!! (IL2CPP)
그렇다면 C# 스크립트를 IL코드로 봐보자!!
일단 라이더 기준 IL Viewer를 키면 오른쪽 창이 뜨고 망치를 누르면 언어가 변환돼서 보여진다!
DLL이란?
DLL을 알기 앞서 라이브러리가 뭔지 알고 가야한다
라이브러리란 소프트웨어 개발에서 자주 쓰고 기초적인 함수들을 중복 개발하는 것을 피하기 위해 표준화된 함수 및 데이터 타입을 만들어서 모아둔 것이다
라이브러리는 언제 메인 프로그램에 연결하느냐에 따라 Static Link와 Dynamic Link로 나누게 되며
DLL은 이때 후자를 뜻한다
Static Link Library
정적링크라고 하며 컴파일 시점에 라이브러리가 링커에 의해 연결되어 실행파일의 일부분이 된다
DLL
동적링크라고 하며 실행파일에서 해당 라이브러리의 기능을 사용 시에만 참조하여 기능을 호출한다
DLL을 사용하면 더 적은 리소스를 사용할 수 있으며 모듈식 아키텍처 활용이 가능해지고 손쉬운 베포와 설치가 가능해지며, 프로그래머들의 분담 작업이 용이해지고 재사용성도 뛰어나다
다시 본론으로 넘어와서!
Generic Sharing이 무엇이냐?
C# , C++ 매칭에 어려움 중 제너릭이 있다
T => Template 약자인듯?
★ Call By Value vs Call By Reference
(데이터를 복제해서 넘김) (데이터의 위치 정보를 넘김)
이게 왜 갑자기 나오노? ;;;; 포인터 떠오르면 편함! 이거는 C++까지의 개념!
C#에서는 타입에 따라 Value(구조체, int, char, bool 등) or Reference(Class, string, array 등) 을 사용함!
전부다 IL2CPP 개념을 이해하기 위해서?!!!!!!!!!!!!!!!!!!!!!
C#을 C++처럼 사용하면 좋다! ★