Print Friendly and PDF

전체 글 243

[C# 기초이론] 델리게이트와 이벤트 완전 정리

1. 델리게이트(Delegate) 기본 개념정의메서드의 참조를 저장하고 실행할 수 있는 타입입니다. 함수 포인터의 안전한 버전으로 생각할 수 있습니다.사용자 정의 델리게이트 vs Action/Func// 사용자 정의 델리게이트public delegate void PlayerDeathDelegate(Player player, DeathCause cause);// Action 사용 (반환값 없음)public Action onPlayerDeath;// Func 사용 (반환값 있음)public Func calculate;차이점과 선택 기준구분 사용자 정의 델리게이트 Action/Func매개변수 제한무제한최대 16개ref/out 지원가능불가능가독성의미있는 이름 부여제네릭 타입명사용 편의성타입 정의 필요즉시 사용 ..

[C# 기초이론] JSON/직렬화/역직렬화

📋 핵심 개념직렬화(Serialization): 객체를 저장이나 전송 가능한 형태로 변환하는 과정JSON, 바이너리, XML, YAML, Unity ScriptableObject 등역직렬화(Deserialization): 직렬화된 데이터를 다시 객체로 변환하는 과정🎯 사용 목적데이터 저장: 게임 세이브 파일, 설정 파일네트워크 통신: 서버와의 데이터 송수신객체 복사: 깊은 복사를 위한 수단Unity Inspector: [SerializeField]를 통한 에디터 노출🛠️ 주요 라이브러리 비교JsonUtility (Unity 내장)장점: 빠름, 가벼움단점: 기능 제한적, Dictionary 미지원용도: Unity 내부 데이터 처리Newtonsoft.Json장점: 기능 풍부, Dictionary 지원,..

[C# 기초이론] 배열,List,HashSet,Dictionary/해시테이블, 해시함수, 버킷

1. 각 자료구조의 특징🔵 배열 (Array)고정 크기, 연속 메모리 저장런타임 크기 변경 불가 (Array.Resize는 새 배열 생성)가장 메모리 효율적🔵 List동적 크기, 내부적으로 배열 사용초기 Capacity: 0 → 첫 Add 시 4 → 이후 2배씩 확장확장 시 연속된 메모리 공간 재할당 + 기존 데이터 복사🔵 HashSet값만 저장, 중복 불허해시 테이블 기반으로 빠른 중복 체크🔵 DictionaryKey-Value 쌍 저장해시 테이블 기반으로 빠른 키 검색2. 시간복잡도연산 배열 List HashSet Dictionary인덱스 접근O(1)O(1)--검색O(n)O(n)O(1)O(1)삽입-O(1)*O(1)O(1)삭제-O(n)O(1)O(1)*List 끝에 추가 시. 확장 발생 시 O(n..

[C# 기초이론] 리플렉션

📖 리플렉션이란?런타임 중에 타입의 정보(필드, 메서드, 프로퍼티 등)를 동적으로 가져오고 조작할 수 있는 C#의 기능🎯 핵심 개념컴파일 타임 vs 런타임컴파일 타임: 코드 작성 시점에 타입이 결정됨런타임: 프로그램 실행 중에 동적으로 타입을 찾아야 할 때 리플렉션 필요리플렉션의 동작 원리어셈블리의 "타입 목록표" 검색문자열 기반 타입/멤버 이름 비교런타임 타입 안전성 검증메타데이터를 통한 정보 추출🛠️ 유니티에서의 리플렉션 사용 사례1. 에디터 툴 개발// 커스텀 에디터에서 모든 public 필드 표시FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);2. 데이터 직렬화/역직렬화// JSON에서 "Rigi..

[C# 기초이론] 박싱/언박싱

1. 박싱/언박싱 정의박싱: 값타입(int, float, struct 등)을 참조타입(object)으로 변환하는 과정언박싱: 박싱된 object를 다시 정확히 같은 값타입으로 변환하는 과정2. 발생 조건값타입이 object, interface, 또는 params object[] 매개변수로 전달될 때컬렉션이 object 기반일 때 (ArrayList, Hashtable 등)3. 메모리 영향값타입 복사본이 힙에 저장 (스택 → 힙)추가 메모리 오버헤드: Object Header(8바이트) + Method Table Pointer(4바이트) + 실제 값int 4바이트 → 박싱 시 총 16바이트 사용4. 성능 문제힙 메모리 할당으로 GC 압박 증가GC 수집 시 프레임 드랍 발생 → 60fps 유지 어려움모바일에..

[C# 기초이론] 메모리 단편화

메모리 단편화란?메모리가 연속적으로 할당되어 있지 않고 빈 공간이 있는 것을 말합니다.두 가지 종류내부 단편화: 메모리가 1,2,4,5에 할당되어 있을 때 3이 비어있는 상태로, 내부적으로 단편화가 일어났다고 하여 내부 단편화라고 합니다.외부 단편화: 빈 공간은 있지만 요청한 크기만큼의 연속된 메모리 공간이 없는 상태를 외부 단편화라고 합니다.Unity/C#에서의 메모리 단편화 해결GC(Garbage Collector)가 발생할 때 가비지로 인한 빈 공간을 압축(Compaction)을 통해 연속적으로 모아 해결합니다.GC의 압축 과정Mark Phase: 사용 중인 객체들을 표시Sweep Phase: 사용하지 않는 객체들(가비지)을 제거Compact Phase: 살아있는 객체들을 메모리 앞쪽으로 이동시켜 ..

[C# 기초이론] GC

GC(Garbage Collection)란?.NET에서 힙 메모리를 자동으로 관리하는 시스템으로, Mark-and-Sweep 방식을 사용합니다.Root 참조 (GC Root):GC가 추적을 시작하는 최상위 참조점들입니다.스택 변수들 (현재 실행 중인 메서드의 지역변수, 매개변수)정적(static) 변수들CPU 레지스터에 저장된 참조GC Handle들활성화된 스레드의 스택static MyClass staticVar = new MyClass(); // Root 참조void Method() { MyClass localVar = new MyClass(); // Root 참조 localVar.child = new MyClass(); // localVar를 통해 도..

[C# 기초이론] 메모리 구조

1. 스택 (Stack)값타입 지역변수와 참조타입 변수의 참조값 저장LIFO 구조, 함수 종료 시 자동 해제빠른 할당/해제, GC 불필요2. 힙 (Heap)참조타입 객체들이 저장 (클래스, 배열, 문자열 등)Generation 0, 1, 2로 세분화되어 효율적인 GC 수행메모리 해제는 GC가 담당힙의 Generation 세분화:Generation 0: 새로 생성된 객체들 (가장 작고 자주 수집)Generation 1: Gen 0에서 살아남은 객체들 (중간 단계)Generation 2: 오래 살아남은 객체들 (가장 크고 가끔 수집)세분화 이유: 대부분 객체는 금방 소멸하므로, 어린 세대만 자주 검사하여 성능 향상3. 데이터 영역전역변수, static 변수 등 저장프로그램 종료까지 유지4. 코드 영역실행 가..

[C# 기초 이론] 값타입/참조타입

1. 기본 정의값타입: 데이터 자체를 저장 (struct, int, float, bool 등)참조타입: 객체의 주소를 저장 (class, string, array, List, Dictionary 등)2. 메모리 저장 규칙참조타입 객체: 항상 힙 영역값타입: 선언된 위치에 따라 결정지역변수 → 스택클래스 멤버변수 → 힙 (클래스와 함께)정적(static) 변수: 데이터 영역상수, 문자열 리터럴: 데이터 영역메모리 구조:스택: 지역변수, 매개변수 (LIFO, 빠름)힙: 동적 할당 객체 (GC 관리 대상)데이터: 전역변수, static 변수, 상수 (프로그램 종료까지 유지)3. 동작 방식값타입: 할당 시 데이터 복사 → 독립적참조타입: 할당 시 주소 복사 → 같은 객체 참조4. 성능 특성값타입: 빠름 (스택 ..

[C# 기초이론] 추상클래스와 인터페이스

1. 추상클래스 (Abstract Class)abstract 키워드로 생성하는 클래스인스턴스화 불가능, 상속을 통해서만 사용단일 상속만 가능추상 메서드(abstract): 구현부 없이 선언만, 자식 클래스에서 반드시 override로 구현일반 메서드/필드: 구현 가능, 자식 클래스에서 공유virtual 메서드: 자식 클래스에서 override 가능, base.Method()로 부모 구현 활용 가능2. 인터페이스 (Interface)interface 키워드로 생성인스턴스화 불가능, 클래스에서 구현(implement)하여 사용다중 구현 가능모든 멤버를 반드시 구현해야 함계약(Contract) 역할: "이 기능들을 반드시 제공해야 함"3. 공통점과 차이점공통점:인스턴스화 불가능다형성 지원 (IWeapon we..