1. 배열이란?
배열은 데이터 형식이 같은 변수를 여러 개 한꺼번에 묶어서 처리하기 위해 사용되는 것입니다.
배열을 묶는 데이터 형식은 값 형식이더라도 배열은 참조 형식입니다.
배열은 변수를 정의하고, 값을 대입한 다음, 인덱스를 통하여 접근하면 됩니다.
선언 방법 |
데이터-형식[] 배열-이름 = new 데이터-형식[크기]; |
크기는 배열의 크기를 의미합니다. 같은 데이터 형식이 몇 개인지를 의미합니다.
사용 방법 |
배열-이름[인덱스] = 값; |
배열을 구성하는 데이터 형식들을 요소(Element)라고 합니다.
그리고 그 요소의 주소처럼 사용되는 위치 값이 인데스(Index)입니다.
처음 배열을 선언할 때 [] 안에 들어가는 값은 크기이고, 그 배열을 사용할 때 사용되는 []는 배열의 인덱스입니다.
인덱스는 0부터 사용됩니다. 그 뒤는 1, 2, 3 ... 순으로 사용됩니다.
using UnityEngine;
public class ArrayExample : MonoBehaviour
{
void Start()
{
string[] Avengers = new string[3]; // 3개짜리 string 배열 정의
// 배열의 요소에 값 대입.
Avengers[0] = "Iron Man"; // 인데스가 0임.
Avengers[1] = "Captain America";
Avengers[2] = "Spider Man";
Debug.Log(Avengers[1]); // 출력 : Captain America
}
}
배열의 크기를 바로 정의하지 않고, 값을 넣음으로써 크기를 자동적으로 정의하게 할 수 있습니다.
using UnityEngine;
public class ArrayExample : MonoBehaviour
{
void Start()
{
string[] Avengers = new string[] { "Iron Man", "Captain America", "Spider Man" }; // 크기가 3인 문자열 배열
int[] numbers = new int[] { 1, 2, 3, 4 }; // 크기가 4인 정수 배열
}
}
2. 다차원 배열
다차원 배열이란 배열을 둘 이상의 차원으로 만드는 것입니다
C# 배열은 최대 32차원 배열을 가질 수 있습니다.
다차원 배열은 [] 안에 ,를 사용하여 정의합니다.
2.1 2차원 배열
2차원 배열 정의 방법 |
데이터-형식[,] 배열-이름 = new 데이터-형식[크기1, 크기2]; |
2차원 배열 사용 방법 |
배열-이름[인덱스1, 인데스2] = 값; |
크기1, 크기2는 2차원 배열의 크기를 의미합니다.
2.2 3차원 배열
3차원 배열 정의 방법 |
데이터-형식[,,] 배열-이름 = new 데이터-형식[크기1, 크기2, 크기3]; |
3차원 배열 사용 방법 |
배열-이름[인덱스1, 인데스2, 인덱스3] = 값; |
using UnityEngine;
public class MultiDimensionalArraysExample : MonoBehaviour
{
void Start()
{
// 1차 배열
string[] string1s = new string[2];
string1s[0] = "String0";
string1s[1] = "String1";
string1s[2] = "String2";
Debug.Log(string1s[0]); // 출력 : String0
string[] string2s = { "String21", "String22", "String23" };
Debug.Log(string2s[1]); // 출력 : String22
// 2차 배열 선언 및 초기화
int[,] number2Ds = new int[2, 3];
number2Ds[0, 0] = 0;
number2Ds[0, 1] = 1;
number2Ds[, 0 2] = 2;
number2Ds[1, 0] = 10;
number2Ds[1, 1] = 11;
number2Ds[1, 2] = 12;
Debug.Log(number2Ds[1, 0].ToString()); // 출력 : 10
string[,] string2Ds = new string[,] { { "one", "two" }, { "three", "four" }, { "five", "six" } };
// 3차 배열 선언
bool[,,] isBool3s = new bool[2, 2, 3];
isBool3s[0, 0, 0] = true;
}
}
3. 가변 배열
가변 배열은 배열의 배열입니다.
배열들을 다시 배열을 만든 것입니다.
포함되어 있는 배열의 크기가 같지 않아도 됩니다.
가변 배열 정의 방법 |
데이터-형식[][] 배열-이름 = new 데이터-형식[크기][]; 배열-이름[0] = new 데이터-형식[크기1]; ... 배열-이름[n] = new 데이터-형식[크기n]; |
크기1, 크기2는 2차원 배열의 크기를 의미합니다.
가변 배열 사용 방법 |
배열-이름[인덱스1][인데스2] = 값; |
예제 |
int[][] jaggedArray = new int[3][]; jaggedArray[0] = new int[2]; jaggedArray[1] = new int[4]; jaggedArray[2] = new int[3]; |
첫 번째 요소는 2개 정수의 배열이고, 두 번째 요소는 4개 정수의 배열이고, 세 번째 요소는 3개 정수의 배열입니다. 각 요소는 정수의 1차원 배열입니다.
다음 예제처럼 배열 요소에 초기값을 정의하면, 이 경우 배열 크기가 필요 없습니다.
예제 |
int[][] jaggedArray = new int[3][]; jaggedArray[0] = new int[] { 1, 2, 3, 4 }; jaggedArray[1] = new int[] { 5, 6 }; jaggedArray[2] = new int[] { 7, 8, 9 }; Debug.Log(jaggedArray[1][0].ToString()); // 출력 : 5 |
정의 시 전체를 초기화 할 수도 있습니다.
예제 |
int[][] jaggedArray3 = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6, 7 }, new int[] { 8, 9 } }; |
다음과 같이 약식으로 사용 할 수도 있습니다.
예제 |
int[][] jaggedArray3 = { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6, 7 }, new int[] { 8, 9 } }; |
4. 속성과 메서드
배열은 속성과 메서드를 사용할 수 있습니다.
분류 |
키워드 |
기능 |
속성 |
Rank |
배열의 차원수를 가져옵니다. |
Length |
배열의 길이를 가져옵니다. |
|
메서드 |
Clear |
배열의 초기화시킵니다. 숫자형 데이터 형식(정수형, 실수형)은 0, 논리형은 false, 참조형은 null로 초기화함. |
Resize |
배열의 크기를 변경합니다. |
메서드인 Clear와 Resize를 사용하기 위해서는 using 지시문에서 using System;을 선언하여야 합니다.
네임스페이스 |
using System; |
using UnityEngine;
using System;
public class ArrayMethodAttribute : MonoBehaviour
{
void Start()
{
int[] ints = new int[] { 1, 2, 3, 4, 5 };
Debug.Log(ints.Length.ToString()); // 출력 : 5 ... 크기가 5임.
Debug.Log(ints.Rank.ToString()); // 출력 : 1 .. 1차원임.
float[] floats = new float[5];
Array.Clear(floats, 0, 5); // 배열 요소 0부터 5까지 초기값인 0으로 초기화 함.
Array.Resize(ref floats, floats.Length + 1); // float 크기를 1만큼 크게 변경
}
}
위 예 ref 키워드는 참조로 전달되는 값을 나타냅니다.
5. 성능
일차원 배열, 가변 배열, 다차원 배열은 성능 차이가 발생합니다.
다음은 유니티에서 100x100x100 배열을 100번 반복했을 경우 소요되는 시간의 결과 값입니다.
배열 종류 |
전체 시간(100회 반복) |
일차원 배열 |
660 ms |
가변 배열 |
730 ms |
다차원 배열 |
3470 ms |
결과적으로 성능은 일차원 배열 > 가변 배열 > 다차원 배열로 나옵니다.
배열은 사용자가 정의할 수 있는 데이터 형식이기 때문에 될 수 있으며 일차원 배열로 사용하는 것이 좋습니다.
예제 : 2차원 배열 → 1차원 배열
using UnityEngine;
public class TwoDArrayToOneDArray : MonoBehaviour
{
void Start()
{
int[,] array2Ds = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 } }; // 2차원 배열
int[] array1Ds = new int[array2Ds.GetLength(0) * array2Ds.GetLength(1)]; // 1차원 배열
// 2차원 배열 → 1차원 배열
for (int i = 0; i < array2Ds.GetLength(0); i++)
{
for (int j = 0; j < array2Ds.GetLength(1); j++)
{
array1Ds[i * array2Ds.GetLength(1) + j] = array2Ds[i, j];
}
}
}
}
다차원 배열의 크기를 얻는 방법은 GetLength(차원수)입니다.
차원수는 0부터 시작합니다.
'프로그램 > 유니티 C# 강좌' 카테고리의 다른 글
[유니티 C# 강좌] 6. 형 변환(Type Conversions) (0) | 2019.11.12 |
---|---|
[유니티 C# 강좌] 5. 열거형(Enumeration) (0) | 2019.10.28 |
[유니티 C# 강좌] 4. 문자열(String) (1) | 2019.10.27 |
[유니티 C# 강좌] 2. 데이터 형식(Data Type), 변수(Variable), 상수(Constant) (2) | 2019.10.26 |
[유니티 C# 강좌] 1. 유니티 스크립트(Unity Script) (0) | 2019.10.26 |