1. 메모리 구조
코드 영역 (Code Segment)
- 프로그램의 코드가 저장되는 공간
- 읽기 전용이며 실행 중에 변경되지 않음
- 컴파일 시 크기가 고정됨
데이터 영역 (Data Segment)
- static, const, 전역 변수 등이 저장됨
- 프로그램 시작 시 메모리에 한 번 할당되고 실행 중에는 크기 변경 불가
힙 영역 (Heap)
- new로 생성한 객체, 배열 등 참조형 데이터 저장
- 런타임 중 크기 동적 할당 가능
- 메모리 관리는 GC(가비지 컬렉션)가 처리
스택 영역 (Stack)
- 함수 호출 시 생성되는 지역 변수, 매개변수 등이 저장됨
- 함수 종료 시 자동 제거
- 매우 빠르게 접근 가능
2. 자료구조 개요
단순 구조 (Primitive)
- 정수, 실수, 문자, 논리 등 기본 타입
선형 구조 (Linear)
- 데이터가 일렬로 나열된 구조
- 배열, 리스트, 스택, 큐 등
비선형 구조 (Non-Linear)
- 데이터 간 관계가 1 대 다 또는 다 대 다
- 그래프, 트리 등
파일 구조 (File Structure)
- 파일 내의 데이터를 어떻게 조직할 것인가에 대한 구조
- 순차 파일, 색인 파일, 직접 파일 등
3. 선형 구조
배열 (Array)
정적 배열 (Static Array)
int[] array = new int[5]; // 공간만 할당
int[] array2 = { 1, 2, 3, 4, 5 }; // 초기화와 동시에 선언
int[] array3 = new int[5] { 1, 2, 3, 4, 5 };
다차원 배열 (Multidimensional Array)
int[,] matrix = new int[3,3];
matrix[1,2] = 25;
Debug.Log(matrix[1,2]); // 출력: 25
다중 배열 (Jagged Array)
int[][] jagged = new int[3][];
jagged[0] = new int[] { 1, 2, 3 };
jagged[1] = new int[] { 4, 5 };
jagged[2] = new int[] { 6, 7, 8, 9 };
동적 배열 구현 예시
public class DynamicArray {
private object[] array = new object[0];
public void Add(object o) {
var temp = new object[array.Length + 1];
for (int i = 0; i < array.Length; i++)
temp[i] = array[i];
array = temp;
array[array.Length - 1] = o;
}
}
4. 문자열 (String)
- 사실상 문자(char)의 배열
- 다양한 문자열 조작 메서드 제공
string name = "철수";
int age = 20;
string str1 = $"이름은 {name} / 나이는 {age}";
Debug.Log(str1);
문자열 메서드 예시:
string text = " Hello Unity ";
Debug.Log(text.Trim()); // 공백 제거
Debug.Log(text.ToUpper()); // 대문자
Debug.Log(text.ToLower()); // 소문자
Debug.Log(text.Contains("Unity")); // 포함 여부
Debug.Log(text.Replace("Unity", "C#")); // 교체
5. 리스트 (List<T>)
- 크기를 자동으로 확장하는 동적 배열
- 다양한 타입 사용 가능 (List<int>, List<string> 등)
List<int> list = new List<int> { 1, 2, 3 };
list.Add(4);
list.Insert(1, 100);
list.Remove(2);
list.RemoveAt(0);
전체 출력
foreach (int num in list)
Debug.Log(num);
6. 연결 리스트 (LinkedList<T>)
- 노드(Node) 단위로 연결되는 구조
- 삽입/삭제가 빠름
LinkedList<int> linked = new LinkedList<int>();
linked.AddLast(10);
linked.AddFirst(5);
linked.RemoveLast();
7. 스택 (Stack<T>)
- 후입선출(LIFO) 구조
- 가장 마지막에 추가된 값이 먼저 나감
Stack<int> stack = new Stack<int>();
stack.Push(10); // 추가
int val = stack.Pop(); // 제거
int top = stack.Peek(); // 확인만
8. 큐 (Queue<T>)
- 선입선출(FIFO) 구조
- 먼저 들어온 데이터가 먼저 나감
Queue<string> queue = new Queue<string>();
queue.Enqueue("A"); // 추가
string val = queue.Dequeue(); // 제거
string peek = queue.Peek(); // 확인
9. 덱 (Deque)
- 양방향 삽입/삭제가 가능한 큐
- Unity에서는 LinkedList로 구현 가능
LinkedList<int> deque = new LinkedList<int>();
deque.AddFirst(1); // 앞에 삽입
deque.AddLast(2); // 뒤에 삽입
deque.RemoveFirst();
deque.RemoveLast();
10. 순차 리스트 (ArrayList)
- 다양한 타입을 한 리스트에 저장 가능 (object 기반)
- 박싱/언박싱으로 인해 성능 저하 발생 가능
ArrayList arrayList = new ArrayList();
arrayList.Add(10); // int
arrayList.Add("Hello"); // string
int val = (int)arrayList[0]; // 언박싱 필요
11. 딕셔너리 (Dictionary<TKey, TValue>)
- 키와 값의 쌍으로 데이터를 저장
- 키는 유일하며, 빠른 탐색 가능
Dictionary<string, int> ageMap = new Dictionary<string, int>();
ageMap.Add("철수", 10);
ageMap.Add("영희", 15);
Debug.Log(ageMap["철수"]);
'멋쟁이사자처럼 > 부트캠프' 카테고리의 다른 글
[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 40일차 : 다익스트라 / 정렬 알고리즘 (1) | 2025.07.14 |
---|---|
[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 36일차 : 자료구조 / 배열 예제 (0) | 2025.07.08 |
[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - [고양이 게임(2D 횡스크롤) Project (0) | 2025.07.04 |
[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 34일차 : 인벤토리 기능 / 2D Rigging (1) | 2025.07.03 |
[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 33일차 : 공격 판정 / 체력바 / 아이템 획득 (1) | 2025.07.02 |