본문 바로가기

프로그램/유니티 C# 강좌

[유니티 C# 강좌] 3. 배열(Array)

728x90
반응형

1. 배열이란?

 

배열은 데이터 형식이 같은 변수를 여러 개 한꺼번에 묶어서 처리하기 위해 사용되는 것입니다.

 

코더제로 유니티 C# 강좌 배열(Array) 배열
그림. 배열

 

배열을 묶는 데이터 형식은 값 형식이더라도 배열은 참조 형식입니다.

 

배열은 변수를 정의하고, 값을 대입한 다음, 인덱스를 통하여 접근하면 됩니다.

 

선언 방법

데이터-형식[] 배열-이름 = new 데이터-형식[크기];

 

크기는 배열의 크기를 의미합니다. 같은 데이터 형식이 몇 개인지를 의미합니다.

 

 

사용 방법

배열-이름[인덱스] = ;

 

배열을 구성하는 데이터 형식들을 요소(Element)라고 합니다.

그리고 그 요소의 주소처럼 사용되는 위치 값이 인데스(Index)입니다.

 

코더제로 유니티 C# 강좌 배열(Array) 요소(Element)와 인데스(Index)
그림. 요소(Element)와 인데스(Index)

 

처음 배열을 선언할 때 [] 안에 들어가는 값은 크기이고, 그 배열을 사용할 때 사용되는 []는 배열의 인덱스입니다.

인덱스는 0부터 사용됩니다. 그 뒤는 1, 2, 3 ... 순으로 사용됩니다.

 

코더제로 유니티 C# 강좌 배열(Array) 인덱스
그림. 인덱스

 

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차원 배열을 가질 수 있습니다.

 

코더제로 유니티 C# 강좌 배열(Array) 다차원 배열
그림. 다차원 배열

 

다차원 배열은 [] 안에 ,를 사용하여 정의합니다.

 

 

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. 가변 배열

 

가변 배열은 배열의 배열입니다.

배열들을 다시 배열을 만든 것입니다.

포함되어 있는 배열의 크기가 같지 않아도 됩니다.

 

코더제로 유니티 C# 강좌 배열(Array) 가변 배열
그림. 가변 배열

 

가변 배열 정의 방법

데이터-형식[][] 배열-이름 = 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부터 시작합니다.

728x90
반응형