GameDevelop/Notes 12

퀵 정렬 (Quick Sort)

1. 한 줄 정의퀵 정렬은 기준 원소(Pivot)를 기준으로 분할을 반복하는 분할 정복 정렬 알고리즘이다.2. 핵심 아이디어기준값(Pivot)을 하나 선택Pivot보다 작은 값은 왼쪽Pivot보다 큰 값은 오른쪽좌·우 부분 배열에 대해 재귀 반복3. 동작 과정 예시예시 배열[8, 3, 1, 7, 0, 10, 2]Pivot = 7[3, 1, 0, 2] 7 [8, 10]이후 각 부분 배열에 대해 동일한 과정 반복4. 분할(Partition) 과정이 핵심대표적인 Partition 방식1) Lomuto Partition (로무토 분할)마지막 원소를 Pivot구현 간단성능은 상대적으로 떨어짐2) Hoare Partition (호어 분할)양쪽에서 포인터 이동교환 횟수 적음실무에서 더 자주 사용5. 시간 복잡도평균O..

GameDevelop/Notes 2026.01.26

함수 포인터, 함수 객체, 람다

한 줄 요약함수 포인터는 주소,함수 객체는 객체,람다는 익명 함수 객체다. 함수 포인터 (Function Pointer)함수의 주소를 저장하는 포인터int Add(int a, int b) { return a + b;}int (*FuncPtr)(int, int) = Add;int result = FuncPtr(1, 2); 함수의 이름이 곧 주소이기 때문에, 함수의 이름을 포인터로 저장하거나 매개변수로 넘겨줄 때 함수 포인터를 사용하게 된다. 간편하지만 상태(누적값, 이전 호출 결과 등)를 가질 수 없기 때문에 주로 전역 함수나 static 함수가 사용된다. STL 알고리즘은 Callable을 요구하며, 함수 포인터도 사용할 수 있지만함수 객체나 람다가 더 일반적이다. STL에서 조건자로서 사용할 수..

GameDevelop/Notes 2026.01.20

렌더링 파이프라인

렌더링 파이프라인(Rendering Pipeline)1. 한 줄 정의렌더링 파이프라인은3D 공간의 정점 데이터를최종적으로 화면의 픽셀로 변환하는 전체 과정이다. 2. 전체 흐름 한눈에 보기로컬 스페이스 ↓월드 스페이스 ↓뷰 스페이스 ↓백페이스 컬링 ↓조명 ↓클리핑 ↓투영 ↓뷰포트 변환 ↓레스터라이즈 로컬 스페이스 (Local / Model Space)물체를 기준으로 한 좌표메시가 자기 자신을 원점으로 가짐월드 스페이스 (World Space)월드를 기준으로 한 좌표모든 오브젝트가 공통 기준 공간에 위치뷰 스페이스 (View / Camera Space)카메라 기준 좌표계카메라가 원점가상카메라를 기준으로 물체들을 보여주는데, 이 가상카메라에 회전값이 있거나 하면 투영할 때 등 번..

GameDevelop/Notes 2026.01.20

싱글톤 패턴 (Singleton Pattern)

1. 한 줄 정의싱글톤 패턴은클래스의 인스턴스를 오직 하나만 생성하도록 보장하고,전역 접근 지점을 제공하는 디자인 패턴이다. 2. 왜 싱글톤을 쓰는가?다음과 같은 시스템은 하나만 존재해야 한다.게임 매니저입력 시스템사운드 매니저설정(Config) 관리자👉 여러 개가 생기면 상태 불일치 문제 발생 3. 기본 구현 방식 (C++) class GameManager{public: static GameManager& Get() { static GameManager Instance; return Instance; }private: GameManager() {}}; 특징정적 지역 변수 사용프로그램 종료 시 자동 소멸C++11 이후 스레드 안전 보장 4. 싱글톤의 핵심 ..

GameDevelop/Notes 2026.01.11

옵저버 패턴 (Observer Pattern)

1. 한 줄 정의옵저버 패턴은한 객체의 상태 변화가 발생했을 때이를 구독한 객체들에게 자동으로 알리는 패턴이다. 2. 왜 옵저버 패턴이 필요한가?다음과 같은 문제를 해결하기 위해 사용한다.객체 간 강한 결합(Dependency) 제거상태 변화에 대한 자동 통지이벤트 기반 구조 구현// 나쁜 예Player.TakeDamage();UI.UpdateHP();Sound.Play();Quest.Check();👉 Player가 너무 많은 걸 알고 있음 3. 기본 구성 요소1) Subject (Publisher)상태를 가지고 있음옵저버를 등록 / 제거 / 통지2) Observer (Subscriber)Subject의 변화를 통지받음갱신 로직 수행 4. 구조 다이어그램 (개념)Observer ←─┐Observer ..

GameDevelop/Notes 2026.01.11

가상 함수 테이블 (Virtual Table, vtable)

1. 한 줄 정의가상 함수 테이블은런타임 다형성을 구현하기 위해객체가 사용할 가상 함수 주소들을 저장한 테이블이다. 2. 왜 vtable이 필요한가?컴파일 타임에는 다음을 알 수 없다.Base* obj = new Derived();obj->Update(); // Base 클래스와 Derived 클래스 중 어떤 Update?👉 실제 타입은 런타임에 결정이를 위해 C++은 vtable을 사용한다. 3. vtable 생성 시점컴파일 시클래스마다 vtable 구조가 결정됨런타임 시객체 생성 시 vtable 포인터(vptr)가 설정됨👉 객체마다 vtable이 있는 게 아니다👉 클래스당 하나의 vtable 4. 객체 메모리 구조[..

GameDevelop/Notes 2026.01.11

해시테이블과 해시충돌

해시테이블과 해시충돌에 대해 정리해보았습니다.구글링 및 ChatGPT의 도움을 받아 작성했습니다. 해시 테이블과 해시 충돌 정리1. 해시 테이블이란?키(Key)를 해시 함수로 변환해배열 인덱스로 사용하여 값을 저장·조회하는 자료구조 해시 테이블을 사용하는 핵심 이유는 빠른 탐색이다.빠른 탐색 (평균 O(1)) 2. 왜 해시 테이블이 빠른가?일반적인 자료구조와 비교하면: 구조 탐색 시간 배열O(1) (인덱스 필요)리스트O(N)트리O(log N)해시 테이블O(1) (평균)👉 키 → 인덱스로 바로 접근하기 때문 3. 해시 테이블의 기본 구성1) Key검색 기준 값예: ID, 좌표, 문자열2) Hash FunctionKey → 정수값으로 변환이 값으로 배열 인덱스 결정3) Bucket (버킷)실제 데이터가..

GameDevelop/Notes 2026.01.09

A* 알고리즘

A* 알고리즘에 대해 정리해보았습니다.구글링 및 ChatGPT의 도움을 받아 작성했습니다. A* 알고리즘목적지까지 가장 짧을 것 같은 길을 먼저 탐색하는 길찾기 알고리즘이다. A*는 모든 노드에 대해 이 값을 계산한다.f(n) = g(n) + h(n) g(n)시작점 → 현재 노드까지 실제로 이동한 비용h(n)현재 노드 → 목표 지점까지의 추정 비용f(n)이 노드를 선택할 “우선순위 점수”👉 f 값이 가장 작은 노드를 먼저 탐색 실제 동작 흐름시작 노드를 Open List에 넣는다Open List에서 f 값이 가장 작은 노드를 선택그 노드를 Closed List로 이동 (탐색 완료, 방문한 길)인접 노드들에 대해:g, h, f 계산더 좋은 경로면 값 갱신목표 지점에 도달하면 종료 h(n) = 휴리스틱..

GameDevelop/Notes 2026.01.05

l-value와 r-value

l-value와 r-value 정리입니다.구글링 및 ChatGPT의 도움을 받아 작성했습니다. 1. 한 문장 정의l-value: → 메모리에 이름이 있고, 다시 접근할 수 있는 값r-value: → 임시로 생성되며, 이름이 없고 곧 사라질 값2. 코드로 보는 차이int a = 10;// a → l-value// 10 → r-valuea = 20; // OK10 = a; // 컴파일 에러 👉 l-value는 대입의 왼쪽에 올 수 있다. 3. 메모리 관점에서의 차이l-value메모리 주소가 있음수명이 명확함참조 가능r-value임시 객체표현식이 끝나면 소멸주소를 직접 잡기 어려움 4. 참조(&, &&)와의 관계l-value reference (T&)void Func(int& x);l-value만 받을 수 ..

GameDevelop/Notes 2026.01.01

쿼터니언(Quaternion) vs 오일러 각(Euler Angle)

쿼터니언과 오일러 각도를 정리해보았습니다.구글링 및 ChatGPT의 도움을 받아 작성했습니다. 1. 오일러 각 (Euler Angle)1.1 정의오일러 각은 물체의 회전을 세 개의 축 회전 값으로 표현하는 방식이다.Pitch (X축 회전)Yaw (Y축 회전)Roll (Z축 회전)보통 (Pitch, Yaw, Roll) 또는 (X, Y, Z) 형태로 저장된다. 1.2 장점사람이 이해하기 쉽다디버깅이 직관적이다UI 입력(슬라이더, 각도 입력)에 적합하다👉 그래서 에디터 상의 회전 값은 대부분 오일러 각이다. 1.3 치명적인 문제: 짐벌 락 (Gimbal Lock)짐벌 락이란?세 축 중 두 축이 겹쳐져 자유도가 하나 사라지는 현상이다.예를 들어:Pitch가 ±90°에 가까워질 경우Yaw와 Roll 축이 같은 ..

GameDevelop/Notes 2026.01.01