[멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 35일차 : 자료구조

2025. 7. 8. 14:02·멋쟁이사자처럼/부트캠프

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
'멋쟁이사자처럼/부트캠프' 카테고리의 다른 글
  • [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 40일차 : 다익스트라 / 정렬 알고리즘
  • [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 36일차 : 자료구조 / 배열 예제
  • [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - [고양이 게임(2D 횡스크롤) Project
  • [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 34일차 : 인벤토리 기능 / 2D Rigging
khybin154
khybin154
khybin154 님의 블로그 입니다.
    티스토리 홈
    |
  • khybin154
    khybin154
    khybin154
  • 글쓰기 관리
  • 전체
    오늘
    어제
  • 공지사항

  • 인기 글

    • 분류 전체보기 N
      • 멋쟁이사자처럼 N
        • 부트캠프 N
  • 블로그 메뉴

    • 태그

      컴포넌트
      고양이 게임 마무리
      charatercontroller
      git
      unity 게임 개발 5기
      unity book
      p149 ~ p247
      상속
      실글턴 패턴
      유니티
      오브젝트 풀 패턴
      2d rigging
      배열 폭탄
      인벤토리 기능
      c#
      unity
      게임 수학
      인터페이스
      멋쟁이사자처럼후기
      p316 ~ p375
    • 링크

    • 최근 글

    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    khybin154
    [멋쟁이사자차럼 부트캠프] 유니티 게임 개발 5기 - 35일차 : 자료구조
    상단으로

    티스토리툴바