이번 캠프를 통해서 말로만 듣던 C#이라는 언어에 대해 처음 접하게 되었고, 이에 대한 설명을 찾아보던 중 예전 학원에서 들었던
"C#을 하던 사람은 C++ 스타일에 매우 많은 어려움을 겪는다(사실상 적응 못한다)"
이 이야기가 떠오른다.
일단 C#은 .NET이라 부르는 플랫폼에서 실행되는 언어로 일반적인 C/C++ 언어들은 코드가 컴파일러에서 기계어로 바로 변환해주는 반면 중간에 C# 코드 -> 언어 컴파일러(csc) -> IL(Intermediate Language)로 변환되어 가상 머신 역할을 하는 CLR에서 실행된다.

위 이야기는 C#의 구조에 대한 이야기고 앞서 말한 C++과의 차이점을 이야기 하자면 GC라고 하여 가비지 컬렉터가 존재한다는 점.
C++에서는 메모리나 스레드 관리를 개발자가 직접 관리하고 사용하도록 되어 있는데 C#에서는 이 가비지 컬렉터가 런타임 중에(와우) 메모리 해제와 스레드의 관리를 직접 해준다.
그러니 new를 마구잡이로 써도(실제론 이러면 안되겠지만) 누수 걱정 없이 동적할당이 가능한 것이고 멀티 스레드 환경에서도 C++처럼 골머리를 싸매면서 작업하지 않아도 되는 것이다.
이렇게 편한데 왜 C#이 프로젝트에서 무조건 사용되지 않느냐 하면 아무래도 편의성으로 잃어버린 성능이라고 생각된다.
가비지 컬렉터가 런타임 중 실행된다는 부분이 GC가 자체적으로 판단한다고 하는데 프로그램 실행 중, 개발자가 의도하지 않은 타이밍에 실행된다? 이러면 바로 성능 하락, 혹은 프레임 드랍이 이루어질 수 있다는 의미다.
C++은 이 타이밍을 로딩 중에 한다던가, 사용 후 바로 정리하는 방식으로 가니 설계와 코드 작성만 잘 한다면 성능이 C#보다 월등히 좋을 것이니.(아무래도 C++ 학원에서 배우고 왔다 보니 이런 생각이 드는 것은 어쩔 수 없는 듯 하다. 거의 가스라이팅에 가까운 이야기를 많이 들었으니)
구조에 대한 부분은 기초 강의를 수강하면서 파헤칠 부분이 있으면 파헤쳐 보는 것으로 하고, 그동안 배웠던 내용들도 기억나는데로 정리해서 TIL에 적을 수 있도록 할 예정이다.
오늘은 미니 프로젝트가 마무리되고 발표까지 끝난 금요일이니 오늘 밤은 좀 쉬는 걸로..

'[내일배움캠프 Unity 9기]' 카테고리의 다른 글
| 04/15 TIL - Func와 Action (0) | 2025.04.15 |
|---|---|
| 04/14 TIL ref/out과 hash set의 구조 (0) | 2025.04.14 |
| 04/10 TIL (0) | 2025.04.10 |
| 04/09 TIL(?) (0) | 2025.04.09 |
| 04/08 미니 프로젝트 진행 및 TIL (0) | 2025.04.08 |