전체 글 (308) 썸네일형 리스트형 [C#] Garbage Collector ✅ GC의 목적힙(Heap)에 쌓인 더 이상 참조되지 않는 객체를 자동으로 찾아 제거하여 메모리 누수를 방지프로그래머가 수동으로 delete 같은 메모리 해제를 하지 않아도 되게 함 (C++과 비교되는 장점)🔍 GC의 동작 흐름 요약1. 객체가 생성되면 힙(Heap)에 저장됨var player = new Player(); // new → 힙 메모리 할당이 객체는 스택 변수 player가 참조하고 있음참조가 사라지지 않는 한, GC는 이 객체를 제거하지 않음2. GC는 "참조 그래프"를 분석해서 도달 불가능한 객체를 수거루트(스택 변수, static, CPU 레지스터 등)에서 시작해,따라갈 수 없는 객체는 "고아 객체(unreachable)" → 수거 대상3. 수거 시점: GC는 항상 즉시 작동하지 않음.. [C#] LINQ와 Lazy Evaluation(지연 평가) ✅ LINQ란?LINQ (Language Integrated Query) 는C# 코드에서 배열이나 컬렉션을 SQL처럼 필터링, 정렬, 변환할 수 있게 해주는 기능입니다.🔹 예전 방식List list = new List { 1, 2, 3, 4, 5 };List result = new List();foreach (int i in list){ if (i % 2 == 0) result.Add(i);}🔹 LINQ 방식var result = list.Where(x => x % 2 == 0).ToList(); 🎯 결과는 동일하지만 코드가 훨씬 짧고 읽기 쉬움 ✅ LINQ는 왜 쓰는가?✅ 가독성코드가 SQL처럼 직관적이고 깔끔함✅ 체이닝 가능여러 조건을 연속으로 필터링 가능✅ 유지보수 편함반복문보다 수정이.. [C#] IEnumerable을 쓰는 이유 C++에서는 std::vector, std::list처럼 구체적인 컨테이너를 주로 다루는 반면,C#에서는 IEnumerable 같은 추상적인 인터페이스를 많이 씁니다. 1. 모든 컬렉션을 같은 방식으로 다룰 수 있음void PrintAll(IEnumerable items){ foreach (var item in items) Console.WriteLine(item);} → List, Array, HashSet 등 어떤 컬렉션이 와도 동작함! 2. LINQ 사용 가능 (지연 평가 포함)var result = users.Where(u => u.Age > 18).Select(u => u.Name);Where, Select 등은 모두 IEnumerable 확장 메서드List 같은 구체 타입이 .. [C#] delegate vs Action C#에서 delegate, event, 그리고 event Action은 모두 콜백(callback)이나 이벤트 시스템을 구성하기 위한 기능입니다. 이들은 기능적으로 겹치지만 사용 방식과 의도가 조금씩 다릅니다.✅ 1. delegate와 event 기본 개념delegate (델리게이트)메서드를 변수처럼 저장하고 실행할 수 있게 해주는 형식(Type)여러 메서드를 체인처럼 연결할 수 있음 (Multicast delegate)예:public delegate void MyDelegate(); // 델리게이트 타입 선언MyDelegate callback; // 변수처럼 사용callback += SomeMethod;callback(); event델리게이트에 접근 제한을 추가한 특수한 멤버.. [Unity] Shader Graph에서 Texture 좌표를 UV좌표 대신 World Position으로 적용 증상Dissolve적용 시 머리, 팔, 몸통 등 큰 파츠 단위로 사라짐사라지는 경계가 거칠고 불연속적임원인Noise Texture의 UV좌표가 World Position 기반 노이즈가 아니라 Local UV 기반으로 들어감해결 방법Noise 좌표를 UV 대신 World Position으로 변경하여 공간 기반으로 적용① Position 노드 추가Space 설정:World (자연스러운 공간 기준, 추천)또는 Object (모델의 로컬 기준)대부분의 경우 World 기준이 시각적으로 자연스럽습니다.② Split → 원하는 축만 사용 Position 노드의 출력 → Split보통 X, Z만 사용해서 평면 기반 Noise 적용 X, Z를 Vector2로 Combine해서 사용③ 좌표 스케일 조절Multiply 노.. [Unity] WaitForEndOfFrame()으로 좌표 계산 문제 해결 플레이어가 180도 급전환할 때 체력바의 좌표가 튀는 문제가 있었다.카메라 이동이 아직 반영되기 전에 WorldToScreenPoint()가 호출되고 있다.Cinemachine 카메라가와 UI가 모두 LateUpdate에서 작동하기 때문에 순서를 보장할 수 없다.순서가 어긋남 → 스크린 좌표 계산이 “옛날 카메라 위치” 기준 확실한 해결법: Coroutine에서 WaitForEndOfFrame() 사용하기IEnumerator FollowTarget(){ while (true) { yield return new WaitForEndOfFrame(); // 카메라 움직임 끝난 후 실행 Vector3 screenPos = Camera.main.WorldToScreenPoint.. [알고리즘] BFS,DFS,다익스트라,MST 사용하는 경우 1. BFS (너비 우선 탐색)최단 거리를 구할 때 (모든 간선의 가중치가 동일한 경우)2. DFS (깊이 우선 탐색)모든 경우의 수, 경로 탐색 (완전탐색)백트래킹 기반 문제3. 다익스트라 (Dijkstra)가중치가 있는 그래프에서 한 정점에서 다른 모든 정점까지의 최단 거리 구할 때간선의 가중치가 모두 양수일 때만 사용 가능4. MST (Minimum Spanning Tree, 최소 신장 트리)모든 정점을 최소 비용으로 연결해야 할 때 [C++] 우선순위큐에서 Compare 함수객체 사용 시 true면 우선순위가 낮아진다. std::sort()의 Compare 의미: sort(vec.begin(), vec.end(), Compare); 여기서 Compare(a, b)가 true이면 → a가 b보다 앞에 와야 한다즉, a → true 리턴하면 a가 앞쪽 (우선순위 높음)priority_queue의 Compare 의미:priority_queue여기서 Compare(a, b)가 true이면 → a가 b보다 낮은 우선순위→ a가 뒤로 밀리고, b가 top으로 올라감즉, Compare는 사실상 a 큰 값을 앞으로 오게 해주는 max-heap을 만들기 때문 이전 1 2 3 4 5 ··· 39 다음