[유니티 / C#] 배열

배열

배열은 같은 타입의 변수를 여러 개 모아 놓은 데이터 타입입니다.

 

필요시에 인덱스를 이용해 원하는 주소의 값을 참조할 수 있습니다.

하지만 배열의 크기에 벗어나는 주소를 참조하면 OutOfRange 예외 처리에 걸리 수 있기 때문에 주의해야 합니다.

 

 

 

배열 선언

배열은 선언하고 싶은 자료형의 뒤에 []를 붙여 선언합니다.

int[] array;

 

 

배열은 생성될 때 크기가 결정되고, 이후에 변경할 수 없습니다.

int[] array = new int[5];	//크기가 5인 정수형 배열 생성

 

 

배열을 선언할 때 초기화하는 방법입니다.

선언과 동시에 초기화할 때는 반드시 크기만큼 초기화해주셔야 합니다.

#크기 지정 및 초기화
int[] array = new int[5] { 1, 2, 3, 4, 5 };

#크기 미지정 및 초기화
int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} => array의 크기가 10으로 고정됨

 

 

인덱스를 이용해 해당 배열의 주소의 값을 바꿔주는 방법입니다.

int[] array = new int[5];
array[0] = 1;  => array의 0번째 주소에 1을 대입
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;

 

 

 

 

 

다차원 배열

기본적으로 선언한 배열은 1차원 배열이지만 선언하는 방식에 따라 2차원, 3차원 배열등의 다차원 배열을 생성할 수 있습니다.

 

< 2차원 배열 생성 >

#5x5 길이의 2차원 배열 생성
//[행(row) 크기, 열(col) 크기]
int[,] array = new int[5, 5];

 

 

 

다음은 2차원 배열을 이용해 3의 배수를 찍어주는 간단한 코드입니다.

int[,] array = new int[5, 5];

int num = 3;

//array 배열에 값 넣어주기
for (int i = 0; i < array.GetLength(0); i++)
{
    for(int j = 0; j < array.GetLength(1); j++)
    {
        num += 3;
        array[i, j] = num;
    }
}

//array 배열 값 출력
for (int i = 0; i < array.GetLength(0); i++)
{
    for (int j = 0; j < array.GetLength(1); j++)
    {
        Console.Write($"{array[i, j]}\t");
    }
    Console.WriteLine();
}

출력 결과

 

 

 

 

자주 사용하는 배열 관련 메서드

● Array.Clear(array, index, length)

   array[index]부터 length 길이 만큼의 내용을 지웁니다.

int[] array = { 1, 5, 8, 3, 7 };

Array.Clear(array, 1, 3);  // 1, 0, 0, 0, 7

 

● Array.Sort(array)

  배열을 오름차순으로 정렬

int[] array = { 1, 5, 8, 3, 7 };

Array.Sort(array, 1, 3) // 1, 3, 5, 8, 7
Array.Sort(array);      // 1, 3, 5, 7, 8

 

● Array.Reverse(array)

  배열을 역순으로 뒤집음

int[] array = { 1, 5, 8, 3, 7 };

Array.Reverse(array); // 7, 3, 8, 5, 1

 

● Array.IndexOf(array, value)

  value가 처음 탐색된 인덱스 반환 , value가 없으면 -1 반환

int[] array = { 1, 5, 8, 3, 7, 3 };

Array.IndexOf(array, 3); // 3

 

● Array.LastIndexOf(array, value)

  역순으로 value 탐색 후 인덱스 반환

int[] array = { 1, 5, 8, 3, 7, 3 };

Array.LastIndexOf(array, 3); // 5

 

● Array.Exists(array, predicate)

  조건에 맞는 요소가 있는지 검사, 있으면 true 없으면 false 반환

int[] array = { 1, 5, 8, 3, 7, 3 };

Array.Exists(array, x => x > 7); // True

 

● Array.Find(array, predicate)

  조건에 맞는 첫번째 요소 반환

int[] array = { 1, 5, 8, 3, 7, 3 };

Array.Find(array, x => x > 6); // 8

 

● Array.FindAll(array, predicate)

  조건에 맞는 모든 요소 반환

int[] array = { 1, 5, 8, 3, 7, 3 };

Array.FindAll(array, x => x > 6); // 8, 7

 

● Array.FindIndex(array, predicate)

  조건에 맞는 첫 요소의 인덱스 반환

int[] array = { 1, 5, 8, 3, 7, 3 };

Array.FindIndex(array, x => x > 6); // 2

 

● Array.FindLastIndex(array, predicate)

  조건에 맞는 쳣 요소의 인덱스를 역순으로 탐색 후 반환

int[] array = { 1, 5, 8, 3, 7, 3 };

Array.FindLastIndex(array, x => x > 6); // 4

 

● Array.Copy(array1, array2, length

  첫 번째 인자 배열의 요소를 두 번째 배열에 0부터 length 길이만큼 복사

int[] array = { 1, 5, 8, 3, 7, 3 };
int[] array2 = new int [array.Length];

Array.Copy(array, array2, array.Length); // array2 = { 1, 5, 8, 3, 7, 3 };

 

● Array.Clone()

  배열의 값을 복사하여 새 배열을 생성

int[] array = { 1, 5, 8, 3, 7, 3 };
int[] array2 = (int[])array.Clone(); // array2 { 1, 5, 8, 3, 7, 3 }

 

 

 

* Array.Copy() 와  Array.Clone()의 차이점

Array.Copy()를 통해 A 배열의 값을 B 배열에 복사한 경우

복사한 요소보다 B 배열의 길이가 짧을 경우 예외 처리가 발생합니다.
# 복사되는 배열의 길이가 더 긴 경우
int[] array = { 1, 5, 8, 3, 7, 3 };
int[] array2 = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

Array.Copy(array, array2, array.Length); // array2 { 1, 5, 8, 3, 7, 3, 7, 8, 9, 10 }

#복사되는 배열의 길이가 더 짧을 경우
int[] array = { 1, 5, 8, 3, 7, 3 };
int[] array2 = new int[4] { 1, 2, 3, 4 };

Array.Copy(array, array2, array.Length); // 배열 길이 문제로 ArgumentException 예외 처리 발생


마찬가지로 Array.Clone()을 통해 A 배열의 값을 B 배열에 복사한 경우
B 배열의 길이가 더 짧거나 길어도 B 배열의 길이를 새로 할당한 후 복사됩니다.
# 복사되는 배열의 길이가 더 긴 경우
int[] array = { 1, 5, 8, 3, 7, 3 };
int[] array2 = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

array2 = (int[])array.Clone(); // array2 { 1, 5, 8, 3, 7, 3 };

#복사되는 배열의 길이가 더 짧을 경우
int[] array = { 1, 5, 8, 3, 7, 3 };
int[] array2 = new int[4] { 1, 2, 3, 4};

array2 = (int[])array.Clone(); // array2 { 1, 5, 8, 3, 7, 3 };

 

 

 

 

 

 

 

 

 

'개발, IT > C#' 카테고리의 다른 글

[유니티 / C#] 열거형(Enumeration Type)  (0) 2025.09.12
[유니티 / C#] 함수  (0) 2025.09.12
[유니티 / C#] 반복문 for, while, foreach  (0) 2025.09.11
[유니티 / C#] 조건문  (0) 2025.09.11
[유니티 / C#] 자료형과 형변환  (0) 2025.09.11