목표
- 배열에 대한 사용법을 알아보자.
Arrays
- 배열이란 연관된 데이터를 모아서 관리하기 위해 사용하는 데이터 타입을 말한다.
- 예를들어 0 ~ 99까지의 데이터를 변수에 담아야 한다고 가정해보자.
- 정수형 데이터를 사용한다면 아래와 같은 형태로 저장해야 할 것이다.
int number_0 = 0;
int number_1 = 1;
int number_2 = 2;
...
int number_99 = 99;
- 위와 같은 데이터를 효과적으로 관리하가 위하여 배열을 사용한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Numbers : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
// 자료형 [] 변수명 = new 자료형[크기]
int[] number = new int[100];
// 0 ~ 99까지 입력
for(int i = 0; i < 100; i++)
{
number[i] = i;
}
// 배열의 모든 요소 출력
for(int i = 0; i < number.Length; i++)
{
Debug.Log("number : " + number[i]);
}
}
}
- 위 예제에서 알 수 있듯 배열의 Index는 0으로 시작하며, Index를 사용하여 배열의 요소에 접근할 수 있다.
- 배열에 데이터는 최초에 정한 Size만큼 저장할 수 있으며, 만약 배열의 크기보다 많은 데이터를 넣으려고 하면 에러가 발생한다.
int[] number = new int[100];
number[100] = 100; // Index Out Of Range Exception
배열의 구조
- 배열은 번호와 번호에 대응하는 데이터들로 이루어져 있다.
다차원 배열
- 배열은 위와 같은 1차원 배열 이외에도, 2차원 3차원 배열로 차원을 늘려 사용할 수 있다.
- 특별한 경우를 제외하고 3차원 이상의 배열 자료구조는 사용하지 않는 것이 좋다.
게임이나 앱등 일반적인 프로그래밍에서 3차원 이상의 자료구조가 필요하다면, 무언가 잘못 되어가고 있다는 신호이다.
- 다음은 4,4의 크기를 가지는 2차원 배열 사용에 대한 예제이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Numbers : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
int x = 4;
int y = 4;
// 자료형 [1차원 크기, 2차원 크기] 자료형 = new 자료형 [1차원크기, 2차원크기]
int[,] number = new int[x,y];
for(int i = 0; i < x; i++)
{
for(int n = 0; n < y; n++)
{
number[i, n] = (i * x) + (i * (y-x)) + n;
}
}
for (int i = 0; i < number.GetLength(0); i++)
{
for (int n = 0; n < number.GetLength(1); n++)
{
Debug.Log("number : " + number[i, n]);
}
}
}
// Update is called once per frame
void Update()
{
}
}
배열의 사용 예제
- 다음은 Tag가 "Tree"인 GameObject를 찾아, GameObject 타입을 저장하는 배열 tress에 FindGameObjectsWithTag 결괏값을 저장하고, 각 나무들의 번호와 이름을 출력하는 예제를 작성해 보았다.
using UnityEngine;
using System.Collections;
public class Arrays : MonoBehaviour
{
public GameObject[] trees;
void Start ()
{
trees = GameObject.FindGameObjectsWithTag("Tree");
if (trees != null)
{
for(int i = 0; i < trees.Length; i++)
{
Debug.Log(i + " : " + trees[i].name);
}
}
}
}
비고
- 크기가 정해진 데이터를 사용할때는 배열을 사용한다.
- 하지만 크기가 정해져 있지 않고, 배열의 요소를 동적으로 삽입 삭제 해야 하는 경우는 어떻게 해야 할까?
- 이경우 Collection을 사용하게 된다. (개인적으로 게임을 구현할 때는 Collection을 많이 사용한다.)
그림 출처 : https://www.programiz.com/c-programming/c-multi-dimensional-arrays
'프로그래밍 > Unity C#' 카테고리의 다른 글
[Unity] Tutorial 05 - Beginner Gameplay Scripting (Enumerations) (0) | 2019.11.04 |
---|---|
[Unity] Tutorial 05 - Beginner Gameplay Scripting (Invoke) (0) | 2019.11.04 |
[Unity] Tutorial 05 - Beginner Gameplay Scripting (Instantiate) (0) | 2019.11.04 |
[Unity] Tutorial 05 - Beginner Gameplay Scripting (Classes) (0) | 2019.11.04 |
[Unity] Tutorial 05 - Beginner Gameplay Scripting (Data Types) (0) | 2019.11.04 |