C# 기초
45편변수 하나가 메모리에 자리를 잡는 것에서 시작해 타입과 동작을 나중에 정하는 방법까지. 앞에서부터 읽는 것을 전제로 씁니다.
순서대로 읽는 글 묶음 34개, 369편. 주제로 좁히거나 이름으로 찾습니다.
변수 하나가 메모리에 자리를 잡는 것에서 시작해 타입과 동작을 나중에 정하는 방법까지. 앞에서부터 읽는 것을 전제로 씁니다.
배열부터 LinkedList 까지. 속을 알면 무엇을 고를지가 취향이 아니라 이유가 됩니다.
문법은 아는데 남의 코드가 안 읽히는 자리를 채웁니다. 값이 어디에 놓이고 언제 정해지고 누가 치우는가를 static 에서 GC 까지.
스레드가 무엇인지에서 시작해 동시성 문제와 async, 소켓 서버, UDP, 게임 서버 구조까지. 패킷을 직접 짜 보면서 네트워크 라이브러리가 뒤에서 해 주는 일을 봅니다.
패턴 이름을 외우는 것이 아니라 무엇을 얻고 무엇을 잃는지를 봅니다. 어디서든 꺼내 쓰기부터 하지 않기 위한 패턴까지, 게임 코드에서 실제로 만나는 순서로.
드로우 콜을 줄였는데 느려지는 일이 왜 생기는지에서 시작합니다. 배칭, 아틀라스, 라이팅, 오버드로우를 CPU 가 명령을 만드는 시간과 GPU 가 픽셀을 칠하는 시간으로 갈라서 봅니다.
적 1만 마리를 실제로 돌려 보고 잰 기록입니다. 이웃 탐색을 19.60ms 에서 6.26ms 로 줄인 것보다, 적이 열 배 늘어도 프레임이 안 늘어난다는 쪽이 중요합니다. 틀린 측정과 조용히 실패한 코드도 같이 적었습니다.
유니티는 지금 GC 를 갈아 끼우는 중입니다. 지금 무엇이 도는지, 무엇이 바뀌는지, 그리고 GC 밖에 무엇이 있는지.
AssetBundle 은 에셋 일부를 Player 밖 파일로 빼서 따로 받고 열고 내리게 합니다. 압축과 여는 API, 의존 번들, 공용 에셋 중복, Unload 의 두 방식을 주제별로 봅니다.
Addressables 는 AssetBundle 위에 주소와 카탈로그를 얹어 위치 찾기와 의존 번들 열기를 대신합니다. 그룹과 번들 모양, 번들 단위 참조 카운트, 카탈로그로 하는 원격 배포를 주제별로 봅니다.
Content Directories 는 번들 대신 에셋 하나를 파일 하나로 빌드하고 올리고 내립니다. Root 에서 따라가는 빌드, 해시 파일, 등록과 Load, 핸들만 세는 참조 카운트, 6.6 의 한계를 주제별로 봅니다.
Figma 시안이 Unity 화면이 되는 과정에서 어긋나는 자리를 봅니다. 무엇이 왜 시안과 다르게 나오는지, 시안에 무엇을 적어 넘기면 되는지를 코드 없이 그림으로 설명합니다.
uGUI 와 다른 쪽 체계를 처음부터 봅니다. 파일에 구조와 스타일을 적고, 선택자로 모양을 걸고, 쌓기로 자리를 정하는 방식입니다. 무엇이 uGUI 의 어느 자리인지 짚어 가며 갑니다.
유니티에 런타임 UI 가 없던 시절에 그 자리를 채운 시스템입니다. 2025년 10월에 MIT 로 열린 저장소를 보면서, 왜 이렇게 생겼고 uGUI 와 어디서 갈리는지를 짚습니다. 이어받은 프로젝트에서 만났을 때를 위한 글입니다.
벡터가 무엇인지에서 시작해 삼각함수, 내적과 외적, 행렬을 거쳐 유니티의 Transform, deltaTime, 물리 엔진으로 이어 갑니다. 공식마다 작은 숫자로 직접 계산해 봅니다.
UniRx 와 R3 가 스트림을 어떻게 돌리고, 언제 끊고, 누가 해제하는지 봅니다. R3 는 UniRx 를 고치지 않고 다시 썼고, 그 차이가 에러, 해제, 시간과 프레임에서 드러납니다.
UniTask 는 코루틴의 빈칸을 메우고 Task 의 GC 를 없앤 async 라이브러리입니다. 풀과 PlayerLoop 로 await 를 처리하는 방식과 취소, 예외, 스레드, 할당에서 생기는 일을 주제별로 봅니다.
MessagePipe 는 이벤트를 DI 컨테이너의 서비스로 만듭니다. 구독 목록의 구조, 해제와 스코프, 버퍼드와 비동기 발행, 필터와 진단에서 생기는 일을 주제별로 봅니다.
VitalRouter 는 라우터 하나에 모든 커맨드를 흘립니다. 발행과 구독의 비용, 예외, 인터셉터, 할당, 순서 제어, 스코프에서 생기는 일을 주제별로 봅니다.
유니티의 DI 는 생성자를 못 쓰는 모노비헤이비어와 씬에 묶인 수명을 넘어야 합니다. VContainer 가 스코프를 세우고, 등록을 굳히고, 주입하고, 해제하는 방식을 주제별로 봅니다.
Zenject 는 new 로 잇던 조립을 컨테이너가 대신합니다. 바인딩, 조회, 주입, 수명, 진입점, 풀, 검증, 비용이 어떻게 정해지는지 주제별로 봅니다.
Reflex 는 조립 코드를 등록 표 하나로 바꾸는 작은 DI 컨테이너입니다. 등록, 조회, 주입, 씬 통합, 오류, 비용이 어떻게 정해지는지 주제별로 봅니다.
DOTween 은 getter 와 setter 두 람다로 어떤 값이든 트윈합니다. 트윈이 만들어지고, 갱신되고, 시퀀스로 묶이고, 파기되는 방식과 할당을 주제별로 봅니다.
LitMotion 은 트윈 하나를 구조체 배열의 한 칸으로 만들고 Burst Job 으로 갱신합니다. 그 구조가 빌더, 핸들, 저장소, PlayerLoop, 시퀀스, 수명, 할당을 어떻게 정하는지 주제별로 봅니다.
UniText 는 글리프 고르기만 HarfBuzz 에 맡기고 나머지를 C# 으로 짠 uGUI 텍스트 엔진입니다. 마크업, 그리기, 셰이핑, 양방향, 줄바꿈, 아틀라스, 이모지, 병렬이 어떻게 돌아가는지 주제별로 봅니다.
MessagePack-CSharp 는 필드 이름 대신 번호로 객체를 바이트로 바꿉니다. 포맷, 쓰기와 읽기, 포매터 선택, 키, AOT, Union, 보안, 스트림, 할당을 주제별로 봅니다.
MemoryPack 은 C# 메모리를 그대로 복사해 인코딩을 없앤 직렬화기입니다. 그 대가로 생기는 포맷의 제약과 버퍼, 포매터, 버전, Union, 압축, 할당을 주제별로 봅니다.
MagicOnion 은 .proto 대신 C# 인터페이스를 스키마로 쓰는 gRPC 프레임워크입니다. 등록, Unary, 클라이언트, StreamingHub, 그룹, 하트비트, 필터, Unity, 성능을 주제별로 봅니다.
타일맵 위를 걷는 것도, 스킬 트리의 선행 조건도 정점과 간선으로 보면 같은 문제입니다. 그래프를 어떻게 저장하고 어떻게 훑는지에서 시작해 다익스트라와 A 스타까지 갑니다.
반으로 자르는 것 하나로 백만 칸이 스무 번에 끝납니다. 기본형에서 시작해 중복이 있을 때, 길이를 모르는 배열, 답 자체를 이분 탐색하는 것까지 봅니다.
가까운 것만 보려면 미리 나눠 둬야 합니다. 좌표를 칸으로 바꾸는 것부터 트리로 쪼개는 것, 물체를 묶는 것까지. 무엇이 얼마나 자주 바뀌느냐로 갈립니다.
찾는 시리즈가 없습니다.