본문 바로가기

전체 글537

[C# 섹션 5] List # List- C# List 개념C#의 List는 C++의 vector와 같다고 보면 된다중간 삽입, 중간 삭제는 매우 비효율적이다 - C# List 주의점객체를 생성만 하고 임의 접근을 하면, 항상 런타임에서 ArgumentOutOfRangeException이 발생한다범위를 벗어난 접근 역시 항상 예외가 발생하며, C#의 런타임이 이를 안전하게 보호해 준다즉, C#의 인덱서 접근은 기본적으로 안전하지만주의해서 코드를 작성할 필요는 당연히 있다 - C++ vector 주의점객체를 생성만 하고 임의 접근을 하면 'Undefined Behavior'가 발생하며, Debug 모드에서는 크래시가 발생할 수 있지만,Release 모드에서는 크래시가 발생하지 않을 수도 있다범위를 벗어난 접근은 항상 크래시가 발생하.. 2025. 6. 23.
[C# 섹션 5] 배열 # 배열- 배열Lvalue를 선언할 때 '[]' 위치가C++과는 좀 다르기에 헷갈리지 않아야 한다초기화 방식은 다양하게 지원하는 것을 알 수 있다// C++ int arr[5]; int* arr = new int[5];// C# int[] arr = new int[5];int[] arr2 = new int[5] { 10, 20, 30, 40, 50 };int[] arr2 = new int[] { 10, 20, 30, 40, 50 };int[] arr2 = { 10, 20, 30, 40, 50 }; - C# 배열은 동적할당C++ 배열은정적할당도 가능하고, new 키워드를 통해 동적할당도 가능하다 반면, C# 배열은참조타입으로 동적할당을 한다는 점이 중요하다 - arr.LengthC++에서 sizeof()를.. 2025. 6. 22.
[유니티 최적화] Garbage Collector # GC더 이상 참조 하지 않는 쓰레기 메모리들을 GC가 알아서 수집하고 자동으로 해제해 주는 기능을 의미한다프로파일러를 보다 보면 순간적으로 GC 때문에 성능이 하락하거나 게임이 끊기는 경우가 발생하는데이를 GC spikes라고 부른다 GC를 최소화 하기위한 다양한 기법을 숙지해서 활용하는 것이 중요하다# GC를 줄이기 위한 다양한 기법들 1. 객체 풀링 (Object Pooling) 개념: 게임에서 자주 생성되고 파괴되는 객체들(예: 총알, 파티클 효과, 적 캐릭터)을 미리 일정량 생성해두고 재활용하는 기법이다객체를 파괴하는 대신 비활성화해서 풀에 반환하고, 필요할 때 풀에서 꺼내 활성화하여 사용한다활용: Instantiate와 Destroy는 GC 발생의 주요 원인이다풀링을 사용하면 이 두 연산을 .. 2025. 6. 21.
[유니티 최적화] 메시 압축 # 메시(Mesh)란?유니티에서 3D 모델은 기본적으로 메시이다메시는 3D 객체의 모양을 정의하는 데이터 덩어리로아래의 요소들로 구성된다- 정점 (Vertices)3D 공간에서 점들의 위치 (X, Y, Z 좌표) - 삼각형 (Triangles/Indices)정점들을 연결해서 만들어지는 가장 작은 기본 단위로이 삼각형들이 모여 모델의 형태를 만든다 - 노멀 (Normals)각 정점이나 면이 어느 방향을 바라보고 있는지 나타내는 정보로빛 계산에 사용된다 - UV 좌표 (UV Coordinates)모델 표면에 텍스처를 입힐 때,텍스처의 어느 부분이 모델의 어느 정점에 매핑될지를 나타내는 2D 좌표 - 탄젠트 (Tangents)노멀 맵(Normal Map) 같은 특수 텍스처를 사용할 때 필요한 정보이다이런 정보.. 2025. 6. 21.
[유니티 최적화] 배칭 # 배칭(Batching)?유니티 최적화 기술 중 배칭(Batching)은 중요하다특히 모바일이나 저사양 기기를 위한 유니티 게임을 만들 때필수적으로 이해하고 활용해야 하는 기술이다배칭은 간단히 말해 CPU가 GPU에 그리기 명령(Draw Call)을보내는 횟수를 줄여서 렌더링 성능을 최적화하는 기술이다# 드로우 콜(Draw Call)?배칭을 이해하려면 먼저 드로우 콜을 알아야 한다드로우 콜은 CPU가 GPU에게"이 모델을 이 재질로, 이 위치에 그려라"라고명령을 내리는 것을 의미한다 CPU는 게임 로직 계산, 물리 연산, 드로우 콜 생성 등의 일을 하고GPU는 CPU로부터 받은 드로우 콜을 바탕으로 실제로 화면에 이미지를 그린다문제는 CPU가 드로우 콜을 생성하고 GPU에 보내는 과정이 생각보다 비용이.. 2025. 6. 21.
[유니티 최적화] IL2CPP # 유니티 빌드 과정유니티는 스크립트(C# 등)와 분리된 계층에서 실행된다이 스크립트들은 빌드를 진행하면 아래와 같은 단계로 실행된다 1. IL 코드 생성: 개발자가 작성한 C# 코드는 먼저 IL(중간 언어)로 컴파일된다 2. IL2CPP 변환: IL 코드를 IL2CPP 백엔드가 받아서 C++ 소스 코드로 변환한다 3. 네이티브 컴파일: 변환된 C++ 소스 코드는 각 플랫폼(iOS, Android, Windows 등)에 맞는 네이티브 컴파일러 (ex. iOS는 Clang, Android는 GCC/Clang, Windows는 MSVC)를 통해 해당 플랫폼의 기계어 코드로 최종 컴파일된다 # IL2CPP의 장점1. 런타임 성능IL2CPP는 모든 IL 코드를 미리 C++ 코드를 거쳐 네이티브 기계어로 컴파일.. 2025. 6. 21.