[Unity] C#과 C++ 이중 계층 구조
댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요!
먼저 매프레임 실행되는 물리 연산이나 그래픽 관련 연산(렌더링 파이프라인)은 매우 무거운 작업이므로 저수준의 메모리 제어가 필요하다. 여기서 Cpp의 효용은 이미 충분하다. 게다가 Cpp는 네이티브에 가까워 플랫폼의 api(os, graphic api)와 통신하기에도 유리하다.
사용자에게 노출되는 스크립트 계층은 C#을 쓴다. 우리는 메모리 관리를 GC에게 맡기고 생산성에 집중할 수 있다. C#의 타입 안정성 보장 및 빠른 컴파일 속도가 생산성 향상에 유리하다.
코딩 고수에 양자컴 수준 두뇌 소유자라서 코드 한 번 짜면 수정도 안하고 타입 안정성이 머리속으로 보장되는 사람이면 유니티 안 써도 될듯 ㅇㅅㅇ
를 상속한 클래스 인스턴스는 두 세계에 동시에 존재한다. 하나는 C# 래퍼, 다른 하나는 구체 Native 객체이다. Monobehavior는 Behavior를 상속받고, 그 Behavior는 Component를 상속받고, Component는 이 UnityEngine.Object를 상속받는다.
그렇다고 우리가 클래스 필드로 넣은 List<int> counts 같은 것들이 실제로는 Cpp에 있다는 말은 아니다. 순수 C# 객체는 당연히 Managed Heap에 들어간다. 다만 직렬화가 필요한 경우 엔진이(cpp 계층) 개입하기는 한다. 근데 이것도 씬파일 저장할 때나 inspector에 필드 노출이 필요할 때 하는거고, 런타임에 이 필드를 읽고 쓰겠답시고 Cpp가 개입하지는 않는다.
중요한 사실 하나를 미리 짚자면, 두 객체(C# 래퍼와 Native 객체)는 생명주기가 다르다. 이 포스팅 컬렉션의 계기가 됐던 Fake Null 문제도 여기서 출발한다.
다음 장은 1~7장까지의 내용을 정리할 겸 문제를 뽑아 자기점검을 해볼 예정. 사실 이 포스트에 포함하려했는데 양이 좀 많음. 그리고 6장 내용이 가장 핵심이 될 듯.
