게임 프로그래밍에서 자료 구조는 매우 중요하며 다양한 방식으로 활용된다.
게임의 성능, 메모리 사용, 기능 구현 등에 직접적인 영향을 미치기 때문에 효율적인 자료 구조 선택과 구현이 필요하다.
아래는 게임 프로그래밍에서 자주 사용하는 주요 자료 구조와 그 응용에 대한 설명이다.
I. 배열(Array)
- 정의 : 동일한 타입의 요소를 연속적으로 저장하는 자료 구조
- 응용 : 게임 내 객체들의 위치, 상태, 속성 등을 저장, 예를 들어, 게임 맵의 타일 정보, 캐릭터의 애니메이션 프레임 등을 배열에 저장한다.
II. 연결 리스트(Linked List)
- 정의 : 각 요소가 다음 요소에 대한 포인터를 가지고 있어 동적으로 요소를 추가하거나 제거할 수 있는 자료 구조
- 응용 : 동적 데이터 목록을 다루는 데 유용. 예를 들어 게임 이벤트 큐, 게임 오브젝트의 동적 추가 / 삭제를 관리할 때 사용된다.
III. 스택(Stack)
- 정의 : LIFO(Last In, First Out) 방식으로 동작하는 자료 구조
- 응용 : 게임의 상태 관리, 되돌리기 기능, 재귀적 게임 로직. 예를 들어 플레이어의 이동 경로를 저장하고 되돌리기 기능을 구현할 때 사용된다.
IV. 큐(Queue)
- 정의: FIFO(First In, First Out) 방식으로 동작하는 자료 구조
- 응용: 이벤트 처리, 작업 대기열 관리. 예를 들어 게임의 이벤트 시스템에서 이벤트를 순서대로 처리하거나, AI의 행동 큐를 관리할 때 사용된다.
V. 해시 테이블(Hash Table)
- 정의: 키-값 쌍을 저장하며, 키를 통해 값을 빠르게 검색할 수 있는 자료 구조
- 응용: 빠른 검색과 삽입이 필요한 데이터 관리. 예를 들어, 게임 내 객체의 ID로 객체를 빠르게 검색하거나, 설정 파일을 파싱하여 속성 값을 저장할 때 사용된다.
VI. 트리(Tree)
- 정의: 계층적 구조를 가지는 자료 구조로, 노드와 노드 간의 관계를 부모-자식 관계로 표현.
- 응용: 계층적 데이터 구조 관리, 검색 및 정렬. 예를 들어 게임 씬 그래프(Scene Graph)에서 객체 간의 계층 구조를 관리하거나, 의사 결정 트리(AI Decision Tree)에서 AI의 행동을 결정할 때 사용된다.
VII. 이진 검색 트리(Binary Search Tree)
- 정의: 각 노드가 최대 두 개의 자식을 가지며, 왼쪽 자식은 부모보다 작고 오른쪽 자식은 부모보다 큰 특성을 가지는 트리.
- 응용: 정렬된 데이터를 빠르게 검색, 삽입, 삭제. 예를 들어 게임 내 리더보드를 구현하여 점수를 정렬하고 관리할 때 사용된다.
VIII. 힙(Heap)
- 정의: 완전 이진 트리로서 최대 힙(Max Heap)과 최소 힙(Min Heap)으로 나뉘며, 부모 노드가 자식 노드보다 크거나 작은 특성을 가짐
- 응용: 우선순위 큐, 최적 경로 탐색 알고리즘(A* 알고리즘). 예를 들어 AI의 경로 찾기에서 우선 순위 큐를 사용하여 노드를 관리할 때 사용된다.
IX. 그래프(Graph)
- 정의: 노드와 노드 간의 연결(간선)로 구성된 자료 구조.
- 응용: 경로 탐색, 네트워크 연결, 상호 작용 관계 표현. 예를 들어 게임 맵에서 경로를 찾기 위해 A* 알고리즘을 적용하거나, 캐릭터 간의 상호 작용을 관리할 때 사용됩니다.
X. 트라이(Trie)
- 정의: 문자열 검색을 위한 트리 구조로, 문자열의 공통 접두사를 공유
- 응용: 빠른 문자열 검색과 자동 완성 가능. 예를 들어, 게임 내 명령어 자동 완성, 아이템 검색 기능에서 사용된다.
'Etc.' 카테고리의 다른 글
내가 찾아보고 공부해봐야 하는 키워드 정리 (0) | 2024.07.16 |
---|---|
[C++] 포인터 (0) | 2024.05.17 |
댕글링 포인터(Dangling Pointer) (0) | 2024.05.16 |
[C++] Class (0) | 2024.05.13 |
BaekJoon 1931 문제에서.. (0) | 2024.04.09 |